首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 分頁查詢利器:LIMIT 子句實現 Top N 與 M~N 區間記錄查詢

     編輯:MySQL 資料庫相關知識

LIMIT 語法

SELECT * FROM mytable
ORDER BY afield
LIMIT offset, row_count
  • offset:起始位移(從 0 算起),即略過前 N 筆;
  • row_count:回傳筆數。

常見用法範例

需求SQL說明
前 10 筆SELECT * FROM t ORDER BY id LIMIT 10offset 可省略,預設 0
第 3~7 筆 (共 5 筆)SELECT * FROM t ORDER BY id LIMIT 2, 5略過前 2 筆,取 5 筆
第 N 頁,每頁 20 筆SELECT * FROM t ORDER BY id LIMIT (N-1)*20, 20應用層計算 offset
最後 10 筆SELECT * FROM t ORDER BY id DESC LIMIT 10倒序取前 N

效能提醒

  • OFFSET 極大時(如 LIMIT 1000000, 10)MySQL 仍需掃描前 100 萬行再捨棄,效能急劇下降;
  • 深分頁優化:使用「延遲關聯」或「書籤式分頁」:
-- 書籤式(需唯一遞增鍵)
SELECT * FROM t WHERE id > last_seen_id ORDER BY id LIMIT 20;

-- 延遲關聯
SELECT t.* FROM t
JOIN (SELECT id FROM t ORDER BY id LIMIT 1000000, 20) AS tmp USING (id);

相容性備註

  • MySQL / MariaDB / SQLite / PostgreSQL 9.5+ 支援 LIMIT offset, count;
  • Oracle 12c+ 用 OFFSET ... ROWS FETCH NEXT ... ROWS ONLY;
  • SQL Server 用 OFFSET ... ROWS FETCH NEXT ... ROWS ONLY (2012+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved