LIMIT 語法
SELECT * FROM table_name
ORDER BY sort_column
LIMIT offset, row_count
- offset:起始偏移量 (0-based),即跳過前幾筆。
- row_count:要取回的筆數。
常見應用場景
1. Top N 查詢 (前 N 筆)
-- 取前 10 筆最新文章
SELECT * FROM articles ORDER BY created_at DESC LIMIT 10;
-- 等同 LIMIT 0, 10
2. 分頁查詢 (第 M 頁,每頁 N 筆)
-- 第 3 頁,每頁 20 筆
SELECT * FROM products ORDER BY id LIMIT 40, 20;
-- offset = (page-1)*pageSize = 40
3. 區間篩選 (第 M 到 N 筆)
-- 取第 11 到 20 筆 (共 10 筆)
SELECT * FROM logs ORDER BY id LIMIT 10, 10;
-- offset=10 (跳過前10筆), row_count=10
效能優化關鍵
- 索引配合 ORDER BY:確保
ORDER BY 欄位有索引,避免 filesort。
- 避免大偏移量:
LIMIT 1000000, 10 需掃描 100 萬行再捨棄。解法:
-- 延遲關聯法:先查主鍵再回表
SELECT t.* FROM table t
JOIN (SELECT id FROM table ORDER BY id LIMIT 1000000, 10) tmp USING (id);
- 游標分頁:記住上一頁最大 ID,下頁查
WHERE id > last_id ORDER BY id LIMIT 10,適合無限滾動。
版本相容性
- MySQL 3.23+ 完整支援
LIMIT offset, count。
- MySQL 4.0+ 支援
LIMIT count OFFSET offset (SQL:2008 標準語法)。
實用技巧
LIMIT 1 可優化 EXISTS 子查詢:SELECT 1 FROM table WHERE condition LIMIT 1。
- 搭配
SQL_CALC_FOUND_ROWS + FOUND_ROWS() 一次查詢同時取得分頁資料與總筆數 (需權衡效能)。