nbsp; Resp_io: 289.00 Resp_cpu: 26481829
Access Path: index (AllEqRange)
Index: IDX_TABTEMP_ID
resc_io: 2.00 resc_cpu: 15723
ix_sel: 0.000014 ix_sel_with_filters: 0.000014
Cost: 2.00 Resp: 2.00 Degree: 1
Best:: AccessPath: IndexRange
Index: IDX_TABTEMP_ID
Cost: 2.00 Degree: 1 Resp: 2.00 Card: 1.00 Bytes: 0
***************************************
如上述输出trace文件中加粗所示:
#DK: 表示索引中不同的键值数量。此处数值72764错误,在对表进行更新后,索引中只有1个key。
LB/K:表示每个键值对应多少个leaf blocks。此处数值为1错误,应为leaf blocks即#LB的数值。
DB/K:表示每个key对应多少个数据块。此处数值为1错误,应为#Blks的数值。
Rounded:表示关联后将产生多少条数据。此处数值为1错误,应该是测试表的总行数72764。
ix_sel_with_filters 是带有过滤条件的索引选择率,即过滤因子FF,ix_sel_with_filters =1/DK ,本例中DK数值为1,所以ix_sel_with_filters数值近似为1。
Card:即Cardinality,10gr2以后cardinality用rows表示,是oracle自己估算的数值。本例中应为测试表的行数。
本例中Index range scan访问方式cost计算公式为:
cost=blevel + FF*leaf_blocks + FF*clustering_factor,由于FF(ix_sel_with_filters)数值出现的巨大差异(错误的数值为0.000014,正确数值近似等于1),导致Index range scan访问方式cost数值出现严重偏差,最终生成了错误的执行计划。