Oracle 分頁查詢語句SQL
阿新 • • 發佈:2018-12-03
通用模板
SELECT *
FROM (SELECT TMP_PAGE.*, ROWNUM ROW_ID
FROM (
...//替換這裡
) TMP_PAGE
WHERE ROWNUM < 10)
WHERE ROW_ID >= 1
編碼時拷貝:
SELECT * FROM (SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM (
) TMP_PAGE WHERE ROWNUM < ?) WHERE ROW_ID >= ?
比如:
SELECT * FROM (SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( select * from student ) TMP_PAGE WHERE ROWNUM < 10) WHERE ROW_ID >= 1
優化
將潛逃節省一層,可以提升效率
SELECT *
FROM (SELECT TMP_PAGE.*, ROWNUM ROW_ID
FROM student TMP_PAGE
WHERE ROWNUM < 10)
WHERE ROW_ID >= 1
對比
- 2層巢狀更加通用一些,比如做程式碼封裝時,但,效率要低。
- 1層巢狀效率更高,但,也沒法做通用程式碼的封裝。在自己寫sql時,可以使用這個方式。
- 大部分的使用者只看開始 5%的資料,而沒有興趣看最後面的資料。因此,分頁語句都是讀取前面幾頁快,(相對於前面幾頁)越往後越慢。