当前位置:   article > 正文

oracle排序怎么分页,Oracle高性能排序分页的方法

oracle 排序分页

Oracle数据库没有像MSSQL中的Top,所以分页需要使用rownum。

如果需要按某个字段排序后再分页,常常会出现分页混乱问题,因为排序后的rownum已经因为排序而被打乱了。

很多人会使用嵌套SQL语句的方法分页,效率极低,经笔者试验,只需在order by 的字段上加主键或索引即可让oracle先按该字段排序。

下面是一个分页的例子,分别列举了使用子查询低效率分页和高效分页:

select * from tabname where rownum<20 order by name

但却发现oracle却不能按自己的意愿来执行,而是先随便取20条记录,然后再 order by。原因是rownum是在orderby之前就已经产生了,orader by实际打乱了原先的rownum,所以取出来的不是自己想要的结果。

为了实现功能,我们可以用子查询:

select * from (select * from tabname order by name) where rownum<20

但这样一来,效率会较低很多。

正确的做法是:

在Name字段加上索引,然后再使用 select * from tabname where rownum<20 order by name 即可得到想要的分页结果了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/268609
推荐阅读
相关标签
  

闽ICP备14008679号