首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在Postgresql查询中执行偏移量和限制关键字?

何时在Postgresql查询中执行偏移量和限制关键字?
EN

Stack Overflow用户
提问于 2018-07-18 21:38:44
回答 1查看 703关注 0票数 2

我想了解offsetlimit语句何时在Postgresql查询中执行。给定格式的查询,如

代码语言:javascript
复制
select 
  a.*,
  (-- some subquery here) as sub_query_result
from some_table a
where -- some condition
offset :offset
limit :limit

我的理解是,首先使用where语句对表进行过滤,然后按照select语句的定义,将其余的行投影到表单中。

offsetlimit语句在select语句中发生所有操作后执行吗?还是首先应用whereoffsetlimit语句,然后应用查询的select部分?

我希望它首先应用whereoffsetlimit语句,如果我有一个10,000行的结果集,并且我只想要1000的第2页,它只执行子查询1000次,例如。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 22:15:50

有限制但没有顺序的查询有点道理。来自文件:

在使用限制时,重要的是使用order子句将结果行约束为唯一顺序。否则,您将得到查询的行中不可预测的子集。

当order子句存在时,必须根据需要对select列表中的表达式(包括子查询或函数)进行计算,以确定正确的顺序。在最佳情况下,如果计算的行数小于过滤行数,则计算行数可以限制为和限制+偏移量。这意味着(在某些简化中)偏移量越大,查询运行的时间就越长:

偏移子句跳过的行仍必须在服务器内部计算;因此,较大的偏移量可能效率很低。

在某些情况下,当规划者将一个表达式识别为不可变时,可能会进行优化,但通常您应该期望至少执行一个子查询的时间限制+偏移量。在Postgres 9.5或更早版本中,如果排序不是基于索引,则计算的行数可能会更大。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51411347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档