Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151288
  • 博文数量: 56
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 640
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 09:58
文章分类

全部博文(56)

文章存档

2009年(52)

2008年(4)

我的朋友

分类: Oracle

2009-02-12 16:08:56

为什么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.
阅读(519) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~