Oracle 12c中分页查询增强-TOP N SQL

继之前文章中提到的分页查询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 官方文档中的的描述:

20191208

我们可以利用FETCH ROWS ONLY来实现文章分页TOP-N需求代码:

20191208-2

同样可以SKIP不关心的行数,指定返回相关行:

20191208-3

OFFSET关键字可以帮助我们指定跳跃多少行,从第3行,4行开始FETCH:

20191208-4