分頁查詢優化

 

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 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章