如何在PostgreSQL中优化HAVING子句?

用户3419945

在PostgreSQL中,如果有这样的查询:

SELECT --
FROM --
WHERE -- 
GROUP BY --
HAVING
   func1 AND func2;

我认为规划师可能有以下三种策略:

  1. func1首先在目标列表上执行,然后在同一目标列表上执行func2
  2. func1首先在目标列表上执行,生成较小的结果集,然后func2在较小的结果集上执行
  3. 假设func1成本为c1,func2成本为c2,且c1> c2,func2首先对目标列表执行,生成较小的结果集,然后func1对较小的结果集执行

    PostgreSQL实际使用哪种方法?

尼克·巴恩斯

如果其中之一func是非集合且非VOLATILE表达式,则计划者可以有效地将其移至WHERE子句。

否则,(func1 AND func2)将作为单个过滤器表达式应用于结果组。此时,执行者的懒惰布尔评估规则开始生效;如果第一个条件的计算结果为false,则不会费心执行第二个条件。因此,该行为最接近您的第二个或第三个选项,但是在结果集的一次传递中执行。

评估的顺序取决于计划者,因此从理论上讲,它可以决定首先执行func2但是,我不确定是什么会触发这种行为。即使func1耗资10亿,它似乎仍然倾向于从左到右的评估。

EXPLAIN ANALYSE输出会告诉你在哪里执行计划,应用这些条件,并通过添加一些RAISE NOTICE语句的功能的身体,你可以观察到的函数调用的确切顺序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PostgreSQL中优化HAVING子句?

来自分类Dev

PostgreSQL:如何在查询中合并WHERE子句

来自分类Dev

如何在PostgreSQL中的大表上优化BETWEEN条件

来自分类Dev

如何在PostgreSQL函数中优化解析Json数组

来自分类Dev

如何在POSTGRESQL中禁用/启用不同的查询优化?

来自分类Dev

如何在MySQL中使用'in'子句优化select的删除?

来自分类Dev

您如何在子查询中使用group by / having子句?

来自分类Dev

如何使用where子句中的max优化Oracle中的查询

来自分类Dev

如何在PostgreSQL的group by子句中将数字添加到分组行中

来自分类Dev

如何优化在Postgresql中查询此数据?

来自分类Dev

如何在PostgreSQL GIN索引中优化查询不起作用

来自分类Dev

如何在SQL中的SUM子句中使用not in子句

来自分类Dev

如何在PostgreSQL和Hibernate / Spring中使用LIMIT子句

来自分类Dev

如何在 postgresql 中使用子句 GROUP BY xml 列?

来自分类Dev

如何在Eloquent中组合WHERE子句

来自分类Dev

如何在CakePHP查询中创建`IN`子句?

来自分类Dev

mysql查询中的having子句

来自分类Dev

mysql查询中的having子句

来自分类Dev

PostgreSQL中的NOT IN子句

来自分类Dev

如何在 PostgreSQL 的时间戳上优化此连接

来自分类Dev

如何在React Native中优化图像

来自分类Dev

如何在MySQL中优化查询?

来自分类Dev

如何在Activerecord中优化选择查询?

来自分类Dev

如何在Xcode中打开优化?

来自分类Dev

如何在UIImage中优化内存使用

来自分类Dev

如何在javascript中优化代码

来自分类Dev

如何在Yii中优化查询?

来自分类Dev

如何在Haskell中优化此功能

来自分类Dev

如何在Grails中优化选择属性?

Related 相关文章

热门标签

归档