Oracle 执行计划(Explain Plan)说明(二)

2014-11-24 18:28:58 · 作者: · 浏览: 1
--------------------------------------------------


0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=402)


1 0 TABLE ACCESS (FULL) OF 'TBILLLOG8' (Cost=2 Card=1 Bytes=402)



Oracle 10g的执行计划,关键字换成了rows


执行计划


----------------------------------------------------------


Plan hash value: 2137789089


--------------------------------------------------------------------------------


| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |


---------------------------------------------------------------------------------------------


| 0 | SELECT STATEMENT | | 8168 | 16336 | 29 (0)| 00:00:01 |


| 1 | COLLECTION ITERATOR PICKLER FETCH| DISPLAY | 8168 | 16336 | 29 (0)| 00:00:01 |


---------------------------------------------------------------------------------------------



Cardinality的值对于CBO做出正确的执行计划来说至关重要。 如果CBO获得的Cardinality值不够准确(通常是没有做分析或者分析数据过旧造成),在执行计划成本计算上就会出现偏差,从而导致CBO错误的制定出执行计划。



在多表关联查询或者SQL中有子查询时,每个关联表或子查询的Cardinality的值对主查询的影响都非常大,甚至可以说,CBO就是依赖于各个关联表或者子查询Cardinality值计算出最后的执行计划。



对于多表查询,CBO使用每个关联表返回的行数(Cardinality)决定用什么样的访问方式来做表关联(如Nested loops Join hash Join)。





对于子查询,它的Cardinality将决定子查询是使用索引还是使用全表扫描的方式访问数据。