LIMIT
和 OFFSET
#LIMIT
和 OFFSET
允許您僅檢索查詢其餘部分生成的部分行。
SELECTselect_list
FROMtable_expression
[ ORDER BY ... ] [ LIMIT {count
| ALL } ] [ OFFSETstart
]
如果給定了限制計數,則最多返回該數量的行(但如果查詢本身產生的行數少於該數量,則可能返回更少)。LIMIT ALL
與省略 LIMIT
子句相同,LIMIT
帶有 NULL 引數也與此相同。
OFFSET
表示在開始返回行之前跳過指定數量的行。OFFSET 0
與省略 OFFSET
子句相同,OFFSET
帶有 NULL 引數也與此相同。
如果同時出現 OFFSET
和 LIMIT
,則在開始計算要返回的 LIMIT
行之前,會跳過 OFFSET
行。
使用 LIMIT
時,使用約束結果行以產生唯一順序的 ORDER BY
子句非常重要。否則,您將獲得查詢行的不可預測的子集。您可能正在請求第十行到第二十行,但這是在什麼順序下的第十行到第二十行?除非您指定了 ORDER BY
,否則順序是未知的。
查詢最佳化器在生成查詢計劃時會考慮 LIMIT
,因此根據您為 LIMIT
和 OFFSET
提供的值,您很可能會獲得不同的計劃(產生不同的行順序)。因此,使用不同的 LIMIT
/OFFSET
值來選擇查詢結果的不同子集,將導致結果不一致,除非您使用 ORDER BY
來強制執行可預測的結果順序。這不是錯誤;這是 SQL 不保證以任何特定順序返回查詢結果的固有結果,除非使用 ORDER BY
來約束順序。
OFFSET
子句跳過的行仍然需要在伺服器內部進行計算;因此,較大的 OFFSET
可能會效率低下。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。