首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL LIMIT 子句完整指南:分頁查詢的核心技法

     編輯:MySQL 綜合教學

前言:為什麼需要 LIMIT?

在處理海量資料時,我們極少需要一次性取出所有紀錄。無論是實現「每頁 10 筆」的分頁介面,還是只需抽樣前幾筆資料做預覽,MySQL 的 LIMIT 子句都是不可或缺的利器。本文將系統梳理其語法、參數變體與實戰用法。

核心語法

SELECT * FROM table_name LIMIT [offset,] row_count
-- 或兼容 PostgreSQL 的寫法
SELECT * FROM table_name LIMIT row_count OFFSET offset
  • row_count(必填):指定最大返回行數。
  • offset(選填):指定起始行的偏移量,初始值為 0 而非 1。

三大核心用法場景

1. 只給定一個參數:獲取前 N 筆

-- 等價於 LIMIT 0, 5
SELECT * FROM `table` LIMIT 5;

適用於「最新 5 筆訂單」、「熱門前 10 商品」等場景。

2. 給定兩個參數:指定區間(分頁核心)


-- 取第 6 至 15 筆(每頁 10 筆,第 2 頁)
SELECT * FROM `table` LIMIT 5, 10;
-- offset=5 表示跳過前 5 筆,row_count=10 表示取 10 筆

分頁公式:LIMIT (page - 1) * pageSize, pageSize

3. 從某偏移量取到結尾:第二參數用 -1


-- 取第 96 筆到最後
SELECT * FROM `table` LIMIT 95, -1;

MySQL 允許 row_count 為 -1 表示「無上限」,配合 OFFSET 可實現「跳過前 N 筆,其餘全取」。

進階技巧與注意事項

搭配 ORDER BY 確保順序穩定

LIMIT 本身不保證順序,務必加上 ORDER BY,否則分頁結果可能因資料插入/刪除而錯亂。

SELECT * FROM `articles` ORDER BY `created_at` DESC LIMIT 10, 20;

大偏移量效能陷阱

當 OFFSET 極大(如 LIMIT 1000000, 10),MySQL 仍需掃描並捨棄前 100 萬行,導致查詢緩慢。

  • 優化方案:使用「游標分頁」或「延遲關聯」—— 先用覆蓋索引查主鍵,再回表取明細。
  • 範例:SELECT * FROM t WHERE id > (SELECT id FROM t ORDER BY id LIMIT 1000000, 1) ORDER BY id LIMIT 10;

與 WHERE、JOIN 的執行順序

邏輯執行順序:FROM → JOIN → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT。LIMIT 總是最後執行,這意味著它無法減少前階段的掃描量,只能減少返回給客戶端的行數。

常見錯誤速查表

錯誤寫法問題正確寫法
LIMIT 10, 5 想取前 10實際取第 11-15 筆LIMIT 10 或 LIMIT 0, 10
忘記 ORDER BY分頁結果不穩定必加 ORDER BY id 等唯一欄位
在子查詢中用 LIMIT 但外層無 ORDER BY結果不可預期子查詢與外層皆加 ORDER BY

總結

LIMIT 雖簡單,卻是分頁、抽樣、Top-N 查詢的基石。掌握 單參數、雙參數、負數行數 三種模式,並養成 永遠搭配 ORDER BY 的習慣,即可應對 90% 的業務場景。面對深分頁效能瓶頸時,再引入索引下推、游標分頁等進階優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved