oracle直方图导致执行不使用索引
现有一张表,数据量比较大,3千万行,空间估计是40G左右。
在其中一个字段上建立索引,然后写了个查询语句执行(正常情况下这个查询语句是应该使用索引的)
但是做完oracle的直方图分析后,再看执行计划,这条语句不用索引了,直接全表扫描。
上网查资料,有的人解答如下:
如果当前数据库的优化模式是CBO的话,在oracle做了直方图分析后会根据cost去优化当前SQL的执行计划,从而决定用不用索引。
但是做实验结果如下:
用索引,执行计划中的开销低。实际执行语句,查出一条记录的时间约70秒左右;
不用索引,执行计划中的开销很大。如果实际执行语句,查出一条记录的时间约200秒左右。
问题:
做了直方图分析,oracle会根据执行成本优化选择不用索引,但是实际的情况是不管执行计划的成本还是实际执行时间,都是用索引比较好,是不是oracle的直方图分析有问题?如果不是直方图而是使用或配置上的问题,请指教说明。
如果是oracle的直方图分析存在问题,这种情况证明解决?(注:更改SQL不考虑,最好能从数据库方面入手)