2.5. LIMIT 和 OFFSET

SELECT select_list FROM table_expression [ORDER BY sort_spec] [LIMIT { number | ALL }] [OFFSET number]

LIMIT 允许你只检索由查询剩于部分选出的行的一部分. 如果给出了一个限制计数,那么返回不超过那么多的行. 如果给出了一个偏移量,那么在开始返回行之前将忽略那么多的行.

如果使用 LIMIT,那么用 ORDER BY 子句把结果行约束成一个唯一 的顺序是一个好主意.否则你就会拿到一个不可预料的该查询的行 的子集 --- 你要的可能是第十到二十行,但以什么顺序的十到二十? 除非你声明了 ORDER BY,否则顺序是不知道的.

查询优化器在生成查询规划的时候回考虑 LIMIT,因此如果你给 LIMIT 和 OFFSET 不同的东西,那么你很可能收到不同的规划 (产生不同的行顺序).因此,使用不同的 LIMIT/OFFSET 值 选择不同的查询结果的子集将生成不一致的结果, 除非你用 ORDER BY 强制一个可预料的顺序.这可不是臭虫; 这是一个很自然的结果,因为 SQL 没有许诺把查询的结果 按照任何特定的顺序发出,除非用了 ORDER BY 来约束顺序.