↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 配置参数 / 查询规划

CONFIGURATION PARAMETER查询规划 / 规划器方法配置

enable_seqscan

允许规划器使用顺序扫描计划。

Enables the planner's use of sequential-scan plans.

布尔 会话 引入 9.0(基线) 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
会话任何用户都可在会话内用 SET 修改
默认值
on
引入版本
9.0(基线)
状态
现存

PostgreSQL 18 手册 官方文档

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

on 9.0 – 20

已记录的默认值在 PostgreSQL 9.0–20 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.7 查询规划 本站手册 官方原文

本版译文与 PostgreSQL 9.0 完全一致,下面就是同一段文字。

允许或禁止查询规划器使用顺序扫描计划类型。它不可能完全禁止顺序扫描,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on。

机制详解

enable_seqscan 控制规划器是否可以选择顺序扫描;它按物理页面次序读取关系。

该值在生成计划时读取。会话级修改适合比较不同 EXPLAIN 方案,但不会追溯改写已缓存计划;必须触发失效或重新规划才能观察到不同选择。

关闭只会抑制顺序扫描,因为有些查询仍没有可用替代路径。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    常规 OLTP 应保留上游默认值。可在事务或会话内临时修改以诊断顺序扫描;它按物理页面次序读取关系是否导致回归,随后修复统计信息、索引、估算或查询形态,不要留下集群级方法禁令。

  • OLAP分析与批处理

    应对代表性分析计划分别测试开启与关闭 enable_seqscan,同时评估规划时间、内存、落盘和执行时间;单份报表获益不能证明适合全局修改。

  • 小规格低配实例与开发机

    不要把 enable_seqscan 当作小主机上的永久 hint。资源压力会改变最佳方法,应使用 EXPLAIN (ANALYZE, BUFFERS) 验证;确有需要也应把范围限制到相关负载。

常见问题

  • 把 enable_seqscan 当成单条查询 hint,却忽略它会影响作用域内生成的所有计划。
  • 用已经缓存的预备计划测试,然后误判该参数没有效果。
  • 通过全局禁用计划方法来掩盖统计信息陈旧或基数估算错误。
  • 关闭只会抑制顺序扫描,因为有些查询仍没有可用替代路径。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
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 沿用 on — 会话 布尔 — — —

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Query Tuning 查询规划 26 个 ↗
规划器方法配置 26
enable_async_append 布尔 会话 on —
允许规划器使用异步 Append 计划。 现存
enable_bitmapscan 布尔 会话 on —
允许规划器使用位图扫描计划。 现存
enable_distinct_reordering 布尔 会话 on —
允许规划器重排 DISTINCT 键。 现存
enable_eager_aggregate 布尔 会话 on —
允许规划器把部分聚合提前推过连接。 现存
enable_gathermerge 布尔 会话 on —
允许规划器使用 Gather Merge 计划。 现存
enable_group_by_reordering 布尔 会话 on —
允许规划器重排 GROUP BY 键。 现存
enable_groupagg 布尔 — —
启用或禁用查询规划器使用基于排序的分组和聚合计划类型。 现存
enable_hashagg 布尔 会话 on —
允许规划器使用哈希聚合计划。 现存
enable_hashjoin 布尔 会话 on —
允许规划器使用哈希连接计划。 现存
enable_incremental_sort 布尔 会话 on —
允许规划器使用增量排序步骤。 现存
enable_indexonlyscan 布尔 会话 on —
允许规划器使用仅索引扫描计划。 现存
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 —
允许规划器使用并行哈希计划。 现存
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 扫描计划。 现存