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

需要注意[color=red]如果表有别名,提示也得用别名[/color]

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

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


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

这里可能我得再重新优化下索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值