# 7.6. 限制抵消

限制抵消允许您仅检索由其余查询生成的部分行:

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

如果给定了限制计数,则返回的行数不会超过该数量(但如果查询本身产生的行数较少,则可能会更少)。限制所有与省略限制条款,原样限制带有 NULL 参数。

抵消表示在开始返回行之前跳过那么多行。偏移量 0与省略抵消条款,原样抵消带有 NULL 参数。

如果两者抵消限制出现,然后抵消在开始计算之前跳过行限制返回的行。

使用时限制,重要的是使用订购方式将结果行约束为唯一顺序的子句。否则,您将获得查询行的不可预测的子集。您可能要求第 10 到第 20 行,但第 10 到第 20 行的顺序是什么?排序未知,除非您指定订购方式.

查询优化器采用限制在生成查询计划时考虑在内,因此您很可能会根据您提供的内容获得不同的计划(产生不同的行顺序)限制抵消.因此,使用不同的限制/抵消选择查询结果的不同子集的值会给出不一致的结果除非您强制执行可预测的结果排序订购方式.这不是错误;这是 SQL 不承诺以任何特定顺序提供查询结果这一事实的固有结果,除非订购方式用于约束顺序。

跳过的行抵消子句仍然必须在服务器内部计算;因此一个大抵消可能效率低下。