【问题标题】:postgres_fdw pushing down sum and count, but not min and maxpostgres_fdw 下推总和和计数,但不是最小值和最大值
【发布时间】:2018-08-22 15:16:50
【问题描述】:

从 PostgreSQL 10.x 开始,外部表支持聚合下推。

我注意到 sum 和 count 操作被推送到远程服务器,但 min 和 max 的推送方式不同。

 select min(col) from foreign_table 

显示带有 ORDER BY 的外部扫描,后跟本地应用的 LIMIT。

在我的例子中,远程服务器实际上是 Redshift 而不是另一个 PostgreSQL 实例,所以这会比在查询中发出 min 慢,就像 sum 或 count 一样,奇怪的是,如果您进行类似的查询

 select count(col), min(col) from foreign_table 

min 推送到查询中。

为什么 postgres_fdw 对 min/max 的处理方式不同,是否有优化器设置可以让 min/max 与其他聚合函数一样处理?

【问题讨论】:

    标签: postgresql postgresql-10 postgres-fdw


    【解决方案1】:

    这实际上是最好和最快的方法。您是否测试过您的断言“这将比在查询中直接发出 min 慢”?

    PostgreSQL 按需从执行器节点获取元组,所以会发生 第一行 从外部扫描中获取(通过索引),然后 LIMIT 将完成并且没有将获取更多行。这与远程执行min 时发生的情况基本相同。

    【讨论】:

    • 这仅在远程列被索引时才成立。如果您必须进行全面扫描,排序是 O(N log N) 而搜索 min 是 O(N) - 远程服务器不知道您只关心返回的第一行。在我的情况下,远程服务器是 Redshift,所以 sort 与 min 的特性也不同。
    • 你没有为最后一句话中的断言提供证据。您是否使用远程估算?如果是,则远程索引不存在的存在将影响选择的计划。
    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2016-10-14
    • 2015-10-29
    • 1970-01-01
    • 2016-03-06
    • 2018-04-16
    相关资源
    最近更新 更多