oracle数据库select效率

前提:数据库有将近100W条数据。
目的:需要排序后获取前10条。
处理:select * from (select * from table where col1=1 order by col1) where rownum <= 10;
问题:如上的sql语句,如果数据少的话,可以达到要求;但是如果数据量将近100W,效率就不行了。因为为括号里面的sql是提取全部数据,然后对所有数据就行排序,然后才取前10条。效率可想而知。
各位大虾有没有什么高招,可以提高下oracle的select的效率。

3个回答

select * from (select * from table where col1=1 order by col1) where rownum <= 10;

如果这条语句的话,你可以根据col1建立一个索引,速度就上去了

lzp_lrp
WorldMobile 回复sxwnhywk: 几百万条数据,或者你用分区表,把不用的数据卸载掉
接近 5 年之前 回复
sxwnhywk
sxwnhywk 除了索引,还有没有其他办法。有时候数据多了,所以就莫名其妙的失效了。
接近 5 年之前 回复

select * from table where col1=1 and rownum <= 10 order by col1 这样不可以吗

sxwnhywk
sxwnhywk 这样是先取rownum,然后在排序的。
接近 5 年之前 回复

col1=1 order by col1,既然是提取col1=1的为何还有以col1排序呢?直接elect * from table where col1=1 and rownum <= 10 不可以吗?
若是好多数据先排序再选取前十的话,可以考虑使用索引啊,对col1建立索引

sxwnhywk
sxwnhywk 肯定不是一列,写的有点问题。。如果直接用你说的那种,没有排序的。。除了索引,还有没有其他办法。有时候数据多了,所以就莫名其妙的失效了。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问