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 10 | offset 可省略,預設 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+)。