请教各位高手一个问题,我们实在没有办法了,百思不得其解。我们有一个再简单不过的SQL语句:
select * from table01 where ResultId = '123456' order by NumberType;
这个ResultId上有索引,可是解释计划就是全表扫描,我们试来试去,发现如果去掉order by 子句,解释计划就用上了索引。我们的表没有做过分析,使用的是优化策略是CHOOSE,索引重建过了,还是一样。
请教各位,会是什么原因?谢了!
我们两个数据库,有一个数据库的这个表的数据量比较小,13866814行数据,在这个库里,同样的语句可以用到索引,另一个数据库的表比较大,27069809行数据,就用不到索引。但是不管哪个库,我都不认为ORACLE可以在一次IO中判断出应该全表扫描,照它们的数据量,理应全部使用索引才对。另外,我们无法修改程序,无法修改库表结构,只能指望在操作系统层面、数据库参数层次解决这个问题,因为同类的问题太多,我们没法一个一个地改过去,系统太大了,哪改得过来。当年咱们学习SQL语句,可没有人说这个ORDER BY 还跟数据量有关的!