1. 程式人生 > >Oracle 分頁查詢語句SQL

Oracle 分頁查詢語句SQL

通用模板

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%的資料,而沒有興趣看最後面的資料。因此,分頁語句都是讀取前面幾頁快,(相對於前面幾頁)越往後越慢。