CONFIGURATION PARAMETER查询规划 / 规划器方法配置
enable_mergejoin
启用或禁用查询规划器对归并连接计划类型的使用。
Enables the planner's use of merge join plans.
布尔 会话 引入 7.4(基线) 现存至 20 devel 0 次默认值变更
- 类型
- 布尔bool
- 上下文
- 会话任何用户都可在会话内用 SET 修改
- 默认值
on- 引入版本
- 7.4(基线)
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
已记录的默认值在 PostgreSQL 9.0–19 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
启用或禁用查询规划器对归并连接计划类型的使用。默认值为 on。
机制详解
enable_mergejoin 控制规划器是否可以选择归并连接;它消费按兼容连接键排序的两侧输入。
该值在生成计划时读取。会话级修改适合比较不同 EXPLAIN 方案,但不会追溯改写已缓存计划;必须触发失效或重新规划才能观察到不同选择。
该开关改变规划器可以计价的候选路径,并不会让已选中的方法本身变快。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
常规 OLTP 应保留上游默认值。可在事务或会话内临时修改以诊断归并连接;它消费按兼容连接键排序的两侧输入是否导致回归,随后修复统计信息、索引、估算或查询形态,不要留下集群级方法禁令。
-
OLAP分析与批处理
应对代表性分析计划分别测试开启与关闭 enable_mergejoin,同时评估规划时间、内存、落盘和执行时间;单份报表获益不能证明适合全局修改。
-
小规格低配实例与开发机
不要把 enable_mergejoin 当作小主机上的永久 hint。资源压力会改变最佳方法,应使用 EXPLAIN (ANALYZE, BUFFERS) 验证;确有需要也应把范围限制到相关负载。
常见问题
- 把 enable_mergejoin 当成单条查询 hint,却忽略它会影响作用域内生成的所有计划。
- 用已经缓存的预备计划测试,然后误判该参数没有效果。
- 通过全局禁用计划方法来掩盖统计信息陈旧或基数估算错误。
- 该开关改变规划器可以计价的候选路径,并不会让已选中的方法本身变快。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
- 本数据集收录 enable_mergejoin 以来没有记录到变化。
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 7.4 | — | — | — | 布尔 |
— | — | — |
| 8.0 | — | — | — | 布尔 |
— | — | — |
| 8.1 | — | — | — | 布尔 |
— | — | — |
| 8.2 | — | — | — | 布尔 |
— | — | — |
| 8.3 | — | — | — | 布尔 |
— | — | — |
| 8.4 | — | — | — | 布尔 |
— | — | — |
| 9.0 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.1 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.2 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.3 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.4 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.5 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 9.6 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 10 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 11 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 12 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 13 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 14 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 15 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 16 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 17 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 18 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 19 | on |
— |
会话 |
布尔 |
— |
— |
— |
| 20 | — | — | — | 布尔 |
— | — | — |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 规划器方法配置 26 | |||||
enable_async_append |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对支持异步执行的 append 计划类型的使用。 | 现存 | ||||
enable_bitmapscan |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对位图扫描计划类型的使用。 | 现存 | ||||
enable_distinct_reordering |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器重新排序 DISTINCT 键以匹配输入路径的路径键的能力。 | 现存 | ||||
enable_eager_aggregate |
布尔 | — | — | ||
| 启用或禁用查询规划器使用急切聚合的能力,即将聚合部分地下推到连接之前,并在所有关系完成连接后再做最终聚合。 | 现存 | ||||
enable_gathermerge |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对收集归并计划类型的使用。 | 现存 | ||||
enable_group_by_reordering |
布尔 | 会话 | on |
— | |
| 控制查询规划器是否生成让 GROUP BY 键按照计划子节点(例如索引扫描)的键顺序排序的计划。 | 现存 | ||||
enable_groupagg |
布尔 | — | — | ||
| 启用或禁用查询规划器使用基于排序的分组和聚合计划类型。 | 现存 | ||||
enable_hashagg |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对 hash 聚合计划类型的使用。 | 现存 | ||||
enable_hashjoin |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对哈希连接计划类型的使用。 | 现存 | ||||
enable_incremental_sort |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对增量排序步骤的使用。 | 现存 | ||||
enable_indexonlyscan |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对仅索引扫描计划类型的使用(参见第 11.9 节)。 | 现存 | ||||
enable_indexscan |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对索引扫描和仅索引扫描计划类型的使用。 | 现存 | ||||
enable_material |
布尔 | 会话 | on |
— | |
| 允许或者禁止查询规划器使用物化。 | 现存 | ||||
enable_memoize |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器使用 memoize 计划来缓存嵌套循环连接中参数化扫描的结果。 | 现存 | ||||
enable_mergejoin |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对归并连接计划类型的使用。 | 现存 | ||||
enable_nestloop |
布尔 | 会话 | on |
— | |
| 允许或禁止查询规划器使用嵌套循环连接计划。 | 现存 | ||||
enable_parallel_append |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对支持并行执行的 append 计划类型的使用。 | 现存 | ||||
enable_parallel_hash |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器对使用并行 hash 的哈希连接计划类型的使用。 | 现存 | ||||
enable_partition_pruning |
布尔 | 会话 | on |
— | |
| 允许或者禁止查询规划器从查询计划中消除一个分区表的分区。 | 现存 | ||||
enable_partitionwise_aggregate |
布尔 | 会话 | off |
— | |
| 启用或禁用查询规划器对分区分组或聚合的使用,使分区表上的分组或聚合可以在各个分区上分别执行。 | 现存 | ||||
enable_partitionwise_join |
布尔 | 会话 | off |
— | |
| 启用或禁用查询规划器对分区连接的使用,使分区表之间的连接可以通过连接相匹配的分区来完成。 | 现存 | ||||
enable_presorted_aggregate |
布尔 | 会话 | on |
— | |
| 控制查询规划器是否生成这样的计划:提供的行已按查询中带有 ORDER BY / DISTINCT 的聚合函数所要求的顺序预先排序。 | 现存 | ||||
enable_self_join_elimination |
布尔 | 会话 | on |
— | |
| 启用或禁用查询规划器的一项优化,该优化会分析查询树并将自连接替换为语义等价的单次扫描。 | 现存 | ||||
enable_seqscan |
布尔 | 会话 | on |
— | |
| 允许或禁止查询规划器使用顺序扫描计划类型。 | 现存 | ||||
enable_sort |
布尔 | 会话 | on |
— | |
| 允许或禁止查询规划器使用显式排序步骤。 | 现存 | ||||
enable_tidscan |
布尔 | 会话 | on |
— | |
| 允许或禁止查询规划器使用 TID 扫描计划类型。 | 现存 | ||||