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

MySQL LIMIT 子句完全指南:實現 Top N 查詢與分頁篩選(M 到 N 筆資料)

     編輯:MySQL 資料庫相關知識

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

效能優化關鍵

  1. 索引配合 ORDER BY:確保 ORDER BY 欄位有索引,避免 filesort。
  2. 避免大偏移量:LIMIT 1000000, 10 需掃描 100 萬行再捨棄。解法:
-- 延遲關聯法:先查主鍵再回表
SELECT t.* FROM table t
JOIN (SELECT id FROM table ORDER BY id LIMIT 1000000, 10) tmp USING (id);
  1. 游標分頁:記住上一頁最大 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() 一次查詢同時取得分頁資料與總筆數 (需權衡效能)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved