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 19)

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

文档enable_presorted_aggregate

enable_presorted_aggregate (PostgreSQL 18)

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

文档enable_presorted_aggregate

enable_presorted_aggregate (PostgreSQL 17)

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

文档enable_presorted_aggregate

enable_presorted_aggregate (PostgreSQL 16)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器生成为 ORDER BY / DISTINCT 聚合函数提供预排序输入的计划的能力。
扩展描述 允许查询规划器构建为带有 ORDER BY / DISTINCT 子句的聚合函数提供预排序输入的计划。禁用时,会在执行期间始终执行隐式排序。
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 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”的任何评论、建议或更正 请点击此处