为什么ora执行查询不使用索引呢?这种情况通常发生在CBO已经生成了执行计划的情况下,CBO通过计算认为执行全表扫描要快于通过索引进行查找。
如下:
user_tab_columns.num_distinct定义了该列的distinct值的个数。
如果user_tab_columns.num_distinct=user_tables.num_rows,则用index查询要好于全表扫描。
随着num_distinct减少,使用index的成本会增加,使用index会变得愈加不可取。
init.ora文件中db_file_multiblock_read_count的值定义了ora一次读取的块数,该值设置得越大,执行全表扫描的开销也就越小。
Remember that you MUST supply the leading column of an index, for the
index to be used (unless you use a FAST FULL SCAN or SKIP SCANNING).
还有很多其他的因素影响ora执行开销,通过上述你能够大致明白为什么ora没有采用索引的原因。
如果浏览了上述几条,你仍然觉得ora应该采用索引的方式进行操作的话,那么你可以可以采用index hint.
Obtain an explain plan of the query either using TKPROF with
TIMED_STATISTICS, so that one can see the CPU utilization, or with
AUTOTRACE to see the statistics. Compare this to the explain plan when
not using an index.
阅读(543) | 评论(0) | 转发(0) |