enable_presorted_aggregate

控制是否为预排序聚合创建计划的系统参数

enable_presorted_aggregate 是一个 配置参数,用于确定规划器是否会生成一个计划,该计划将提供按查询的 ORDER BY / DISTINCT 聚合函数所需顺序预排序的行。

enable_presorted_aggregatePostgreSQL 16 中添加。

默认值

enable_presorted_aggregate 的默认值为:on

用法

PostgreSQL 16 中,提交 1349d279 提高了 ORDER BY / DISTINCT 聚合的性能。但是,在某些情况下,这可能会导致规划器生成比以前效率低下的计划,因此可以使用 enable_presorted_aggregate 来恢复与 PostgreSQL 15|] 及更早版本相同的行为。

按 PostgreSQL 版本分列的详细信息

enable_presorted_aggregate (PostgreSQL 18)

设置 on
单位  
类别 查询调优/规划器方法配置
简短描述 启用规划器生成计划的能力,这些计划为 ORDER BY / DISTINCT 聚合函数提供预排序的输入。
额外描述 允许查询规划器构建为带有 ORDER BY / DISTINCT 子句的聚合函数提供预排序输入的计划。禁用时,始终在执行期间执行隐式排序。
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_presorted_aggregate

enable_presorted_aggregate (PostgreSQL 17)

设置 on
单位  
类别 查询调优/规划器方法配置
简短描述 启用规划器生成计划的能力,这些计划为 ORDER BY / DISTINCT 聚合函数提供预排序的输入。
额外描述 允许查询规划器构建为带有 ORDER BY / DISTINCT 子句的聚合函数提供预排序输入的计划。禁用时,始终在执行期间执行隐式排序。
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_presorted_aggregate

enable_presorted_aggregate (PostgreSQL 16)

设置 on
单位  
类别 查询调优/规划器方法配置
简短描述 启用规划器生成计划的能力,这些计划为 ORDER BY / DISTINCT 聚合函数提供预排序的输入。
额外描述 允许查询规划器构建为带有 ORDER BY / DISTINCT 子句的聚合函数提供预排序输入的计划。禁用时,始终在执行期间执行隐式排序。
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_presorted_aggregate

更改历史记录

示例

使用 PostgreSQL 回归测试中的 tenk1 表,在 PostgreSQL 16 中,默认情况下,如下所示的查询会生成一个带有排序键的计划

postgres=# EXPLAIN (COSTS off)
           SELECT SUM(two  ORDER BY two),
                  MAX(four ORDER BY four),
                  MIN(four ORDER BY four),
                  MAX(two  ORDER BY two)
             FROM tenk1;
          QUERY PLAN           
-------------------------------
 Aggregate
   ->  Sort
         Sort Key: two
         ->  Seq Scan on tenk1
(4 rows)

enable_presorted_aggregate 设置为 off 将恢复在 PostgreSQL 15|] 及更早版本中看到的行为

postgres=# SET enable_presorted_aggregate TO off;
SET

postgres=# EXPLAIN (COSTS off)
           SELECT SUM(two  ORDER BY two),
                  MAX(four ORDER BY four),
                  MIN(four ORDER BY four),
                  MAX(two  ORDER BY two)
             FROM tenk1;
       QUERY PLAN        
-------------------------
 Aggregate
   ->  Seq Scan on tenk1
(2 rows)

分类

GUC 配置项规划器

另请参阅

enable_partitionwise_aggregate

反馈

提交任何关于“enable_presorted_aggregate”的评论、建议或更正 此处