最簡寫法:
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:用方法一
當然,
絕大情況下,都是選用方法二會更有效率。