|
2.6. LIMIT 和 OFFSETSELECT select_list FROM table_expression [ LIMIT { number | ALL } ] [ OFFSET number ] LIMIT 允许你只检索由查询剩于部分选出的行的一部分. 如果给出了一个限制计数,那么返回不超过那么多的行. LIMIT ALL 和省略 LIMIT 子句一样. OFFSET 说明在开始给客户端返回行之前忽略多少行. OFFSET 0 很省略 OFFSET 子句是一样的.如果 OFFSET 和 LIMIT 都出现了, 那么在计算 LIMIT 个行之前忽略 OFFSET 行. 如果使用 LIMIT,那么用 ORDER BY 子句把结果行约束成一个唯一 的顺序是一个好主意.否则你就会拿到一个不可预料的该查询的行 的子集 --- 你要的可能是第十到二十行,但以什么顺序的十到二十? 除非你声明了 ORDER BY,否则顺序是不知道的. 查询优化器在生成查询规划的时候回考虑 LIMIT,因此如果你给 LIMIT 和 OFFSET 不同的东西,那么你很可能收到不同的规划 (产生不同的行顺序).因此,使用不同的 LIMIT/OFFSET 值 选择不同的查询结果的子集 将生成不一致的结果 , 除非你用 ORDER BY 强制一个可预料的顺序.这可不是臭虫; 这是一个很自然的结果,因为 SQL 没有许诺把查询的结果 按照任何特定的顺序发出,除非用了 ORDER BY 来约束顺序. |