在“
realkid4”的博客上看到一篇文章《由于版本升级引发的SQL语句故障(续)》在自己的数据库上进行了一些测试,发现了一些问题,不是说
“
realkid4”文章的问题,而是ORACLE数据库的一些问题,也有可能是我的数据库设置的问题,但到现在还没有找到原因:
先描述一下问题的现像,一个数据库表,里面有6万多条数据,建的有主键,login_id有一个非空,非唯一的数据库索引,进行SELECT login_id from table order by login_id,按说这样的操作会直接利用索引的排序功能,不会再排序了,但执行计划里不是这样显示的,我重建索引,重新分析索引,重新分析表,这样都不行,后来 create table tablename as select 重建一张表,重建主键,重建索引就好使了,可能是个个例吧。
原来表结构:
原来表的索引:
原表的执行计划:
执行计划显示还要再进行排序,<sort order by>
重新建表,建索引后表的执行计划:
显示直接利表的索引的排序功能,不再另行排序
原来表结构:
![](http://www.dba365.net/data/attachment/forum/201408/28/110242gjlm5odl33d5md73.jpg)
原来表的索引:
![](http://www.dba365.net/data/attachment/forum/201408/28/110305lnmimn5iuunm8ns6.jpg)
原表的执行计划:
![](http://www.dba365.net/data/attachment/forum/201408/28/110333ce55xmcagpq5xefe.jpg)
执行计划显示还要再进行排序,<sort order by>
重新建表,建索引后表的执行计划:
![](http://www.dba365.net/data/attachment/forum/201408/28/110501tkngfydnvrhjf0yv.jpg)
显示直接利表的索引的排序功能,不再另行排序
到现在也没有搞清楚具体是什么原因,原来的索引有问题的话,索引已经删除重建过,重新分析过,还是不行!
转自:http://www.dba365.net/forum.php?mod=viewthread&tid=126&extra=