# 7.6. 限制
和抵消
限制
和抵消
允许您仅检索由其余查询生成的部分行:
SELECT select_list
FROM table_expression
[ ORDER BY ... ]
[ LIMIT { number | ALL } ] [ OFFSET number ]
如果给定了限制计数,则返回的行数不会超过该数量(但如果查询本身产生的行数较少,则可能会更少)。限制所有
与省略限制
条款,原样限制
带有 NULL 参数。
抵消
表示在开始返回行之前跳过那么多行。偏移量 0
与省略抵消
条款,原样抵消
带有 NULL 参数。
如果两者抵消
和限制
出现,然后抵消
在开始计算之前跳过行限制
返回的行。
使用时限制
,重要的是使用订购方式
将结果行约束为唯一顺序的子句。否则,您将获得查询行的不可预测的子集。您可能要求第 10 到第 20 行,但第 10 到第 20 行的顺序是什么?排序未知,除非您指定订购方式
.
查询优化器采用限制
在生成查询计划时考虑在内,因此您很可能会根据您提供的内容获得不同的计划(产生不同的行顺序)限制
和抵消
.因此,使用不同的限制
/抵消
选择查询结果的不同子集的值会给出不一致的结果除非您强制执行可预测的结果排序订购方式
.这不是错误;这是 SQL 不承诺以任何特定顺序提供查询结果这一事实的固有结果,除非订购方式
用于约束顺序。
跳过的行抵消
子句仍然必须在服务器内部计算;因此一个大抵消
可能效率低下。