您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > Oracle

Oracle高性能排序分页的方法

时间:12-04来源:作者:点击数:
CDSY,CDSY.XYZ

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 即可得到想要的分页结果了。

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门