oracle数据库优化-分页查询优化

在oracle12c以上出现fetch命令进行分页查询问题

SQL> SELECT * FROM
  2  (
  3  SELECT A.*, ROWNUM RN
  4  FROM (SELECT * FROM tab_test_1) A
  5  )
  6  WHERE RN BETWEEN 21 AND 40;
SQL分析:select * from table (目标表是:TAB_TEST_1)这个条件存在查询的第三层,Orcale无法将第三层的查询条件推到最内层,所以最内层和中间层返回的数据都是所有满足条件的数据,数据过滤在外层才完成,效率明显较低。

 

第二条分页查询SQL如下(产生右边的执行计划):

SQL> SELECT * FROM
  2  (
  3  SELECT A.*, ROWNUM RN
  4  FROM (SELECT * FROM tab_test_1) A
  5  WHERE ROWNUM <= 40
  6  )
  7  WHERE RN >= 21;

SQL分析:select * from table(目标表是:TAB_TEST_1)表示不进行分页的原始语句, rownum >= 21 控制分页查询的每页范围。Orcale可以将外层查询条件推到内层查询中,提高查询效率;所以 rownum <= 40 可以被推到内层查询中,一旦Oracle查询结果超过 rownum 限制条件,查询结果就终止,所以此分页查询格式效率较高。
--------------------- 

原文:https://blog.csdn.net/seagal890/article/details/82828276 
 

你可能感兴趣的:(ORACLE数据库性能优化)