Oracle 分組查詢(三層嵌套)效率優化


最簡寫法:

 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:用方法一

當然,

絕大情況下,都是選用方法二會更有效率。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM