继之前文章中提到的分页查询SQL优化思路提到的分页框架:
SELECT /*+ gather_plan_statistics */ *
FROM (
SELECT *
FROM (
SELECT rownum AS rn, r.owner, r.object_id
FROM (
SELECT /*+ index(t t_idx01) --分页语句 */ owner, object_id
FROM t
ORDER BY object_id) r
)
WHERE rownum <= 10)
WHERE rn >= 1;
我们前文中提到过,需要在排序列中创建索引,借助索引有序特性来避免排序并且利用正确的分页框架实现COUNT STOPKEY特性,在Oracle 12c版本之后,Oracle提供了新的分页TOP N功能,来实现上述分页需求并且极大的减少了代码复杂程度。
参考Oracle 官方文档中的的描述:
我们可以利用FETCH ROWS ONLY来实现文章分页TOP-N需求代码:
同样可以SKIP不关心的行数,指定返回相关行:
OFFSET关键字可以帮助我们指定跳跃多少行,从第3行,4行开始FETCH: