最简写法:
select * from ( select rownum as rn, t.* from ( select * from 查询表 ... ) t ) where rn between 起始行号 and 结束行号;
优势:
- 简单,容易理解
- 适合无排序查询
弊端:
- 每次都对整张表进行查询,效率低下。
调优写法:
select * from ( select rownum as rn, t.* from ( select * from 查询表 ... ) t where rownum < 10 ) where rn > 5;
原理:
- rownum 从 1 开始,逐一而增,不能跳增。
- 若一开始便添加 rownum > 5 条件,( 1 > 5 == false ) 恒成立,查询将失败。
- 所以,在第二层查询( 获取 rownum层 )先控制最大值。
- 到了第三层查询( 结果层 )再通过 rownum(别名)控制最小值。
总结:
有 order by:用方法二
无 order by:用方法一
当然,
绝大情况下,都是选用方法二会更有效率。