SQL Server 使用 TOP n,MySQL 採用 ANSI SQL 標準的 LIMIT 子句,功能更強大。
SELECT ... LIMIT [offset,] row_count
offset:跳過的行數(從 0 開始),可省略,默認 0。row_count:返回的最大行數。| 需求 | SQL | 說明 |
|---|---|---|
| 前 10 條 | SELECT * FROM tfidf ORDER BY weight DESC LIMIT 10; | offset=0 省略 |
| 第 2 頁(每頁 10 條) | SELECT * FROM tfidf ORDER BY weight DESC LIMIT 10, 10; | 跳過前 10,取 10 |
| 第 N 頁(每頁 size) | LIMIT (N-1)*size, size; | 通用分頁公式 |
| 從第 2 條開始到末尾 | SELECT * FROM tfidf ORDER BY weight DESC LIMIT 1, 18446744073709551615; | 配合巨大數值實現「跳過前 N」 |
LIMIT 配合 ORDER BY 時,若無合適索引會觸發 filesort,大偏移量(如 LIMIT 1000000, 10)極慢。SELECT id ... LIMIT ... 再 JOIN 回表)或游標分頁(記錄上一頁最大 ID,WHERE id > last_id LIMIT size)。