首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

oracle索引不执行有关问题小结

2012-07-16 
oracle索引不执行问题小结这两天碰到一个问题,在一个分区表建立了索引,用sql分别在测试机数据库和生产机数

oracle索引不执行问题小结
这两天碰到一个问题,在一个分区表建立了索引,用sql分别在测试机数据库和生产机数据库执行,发现在测试机上面可以走索引,但是在生产机上面不走索引,咨询了一下以前的dba同事,给出了下面一些建议:

1.执行这条sql

select /*+ index(TRACE_BASE_INFO TRACE_BASE_INFO_CDX_2)*/ T.SERVER_NAME , SERVER_TIME , REFER_TYPE     from TRACE_BASE_INFO T    where SERVER_NAME = 'test.39.net'      and SERVER_TIME > '2011-03-10'      and REFER_TYPE > 0

需要注意如果表有别名,提示也得用别名

2.测试机上的的数据量,跟生产机的数量有差别么?另外结果的数据占全表的数据百分几呢?对ORACLE来说,如果结果集占了大部分表的数据,它评估后会认为全表扫描的成本比走索引要低,所以它不走索引。

的确 我的测试机数据是1百多万,生产机数据才有7万多,很有可能问题就出现在这里。但是还有一点我想不明白的就是我查询出来的结果是500条这个也不会占大部分表数据,不知道oracle为什么还是不走索引,很奇怪。得再多观察几次。


3.如果表是按时间分区的,那么你的索引就不需要SERVER_TIME列了,建这么多列的组合索引,需要考滤是否有必要?

这里可能我得再重新优化下索引

热点排行