PostgreSQL中LIMIT并允许您仅检索由查询的其余部分生成的部分行:OFFSET
SELECT select_list
FROM table_expression
[ ORDER BY ... ]
[ LIMIT { number | ALL } ] [ OFFSET number ]
如果给出了限制计数,则返回的行数不会超过该数(但如果查询本身生成的行数较少,则返回的行数可能会更少)。 LIMIT与省略子句相同,ALL LIMIT与 NULL 参数相同。
OFFSET说在开始返回行之前跳过那么多行。 OFFSET 与省略子句相同,0 OFFSET与 NULL 参数相同。
如果两者都出现,则在开始计算返回的行之前跳过行。
使用 LIMIT时,务必使用将结果行约束为唯一顺序的子句。否则,你将获得查询行的不可预知子集。你可能会问第十行到第二十行,但第十行到第二十行的顺序是什么?顺序未知,除非您指定了 .
查询优化器在生成查询计划时会考虑在内,因此您很可能会获得不同的计划(产生不同的行顺序),具体取决于您为 LIMIT和LIMIT OFFSET 提供的内容。因此,使用不同的LIMIT OFFSET / ORDER BY值来选择查询结果的不同子集将产生不一致的结果,除非使用ORDER BY强制执行可预测的结果排序。这不是一个错误;这是 SQL 不承诺以任何特定顺序传递查询结果这一事实的固有结果,除非用于约束顺序。
子句跳过的行仍然必须在服务器内部计算;因此,大可能效率低下。