enable_seqscan

控制顺序扫描使用的 GUC

enable_seqscan 是一个 配置参数,用于确定规划器是否应使用顺序扫描。

enable_seqscan 添加于 PostgreSQL 7.0

默认值

enable_seqscan 的默认值为:on

用法

如果设置为 off,规划器将不鼓励使用顺序扫描。

但是,完全禁用顺序扫描是不可能的,特别是当没有可用的或可行的替代扫描类型时。

按 PostgreSQL 版本详细信息

enable_seqscan (PostgreSQL 19)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 18)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 17)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 16)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 15)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 14)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 13)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 12)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 11)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 10)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 9.6)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 9.5)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  
需要重启 false

文档enable_seqscan

enable_seqscan (PostgreSQL 9.4)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 9.3)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 9.2)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 9.1)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 9.0)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 8.4)

设置 开启
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 开启
重置值 开启
源文件  
源行  

文档enable_seqscan

enable_seqscan (PostgreSQL 8.3)

设置  
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  

文档enable_seqscan

enable_seqscan (PostgreSQL 8.2)

设置  
单位  
类别 查询调优 / 规划器方法配置
简短描述 启用规划器使用顺序扫描计划。
扩展描述  
上下文 user
变量类型 bool
来源 默认
最小值  
最大值  

文档enable_seqscan

变更历史

示例

给定以下(简单的)表

postgres=# CREATE TABLE foo (id INT) ;
CREATE TABLE

postgres=# INSERT INTO foo VALUES (generate_series(1,100));
INSERT 0 100

postgres=# ANALYZE foo;
ANALYZE

具有低选择性的查询的典型计划将导致顺序扫描

postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id %2 = 1;
                                          QUERY PLAN                                          
----------------------------------------------------------------------------------------------
 Seq Scan on foo  (cost=0.00..2.50 rows=1 width=4) (actual time=0.029..0.062 rows=50 loops=1)
   Filter: ((id % 2) = 1)
   Rows Removed by Filter: 50
 Planning Time: 0.278 ms
 Execution Time: 0.105 ms
(5 rows)

enable_seqscan 设置为 off 不会阻止顺序扫描,但是成本估算将被人为地“膨胀”,以确保如果存在另一种可用计划类型,则会使用该计划。

postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id %2 = 1;
                                                    QUERY PLAN                                                    
------------------------------------------------------------------------------------------------------------------
 Seq Scan on foo  (cost=10000000000.00..10000000002.50 rows=1 width=4) (actual time=0.049..0.128 rows=50 loops=1)
   Filter: ((id % 2) = 1)
   Rows Removed by Filter: 50
 Planning Time: 0.112 ms
 Execution Time: 0.180 ms
(5 rows)

但是,如果出现可用的替代扫描方法(例如,通过添加索引),则将使用该方法

postgres=# CREATE INDEX foo_id ON foo(id);
CREATE INDEX

postgres=# ANALYZE foo;
ANALYZE

postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id %2 = 1;
                                                    QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------------------------
 Index Only Scan using foo_id on foo  (cost=0.14..14.14 rows=1 width=4) (actual time=0.179..0.279 rows=50 loops=1)
   Filter: ((id % 2) = 1)
   Rows Removed by Filter: 50
   Heap Fetches: 100
 Planning Time: 0.181 ms
 Execution Time: 0.378 ms
(6 rows)

即使规划器通常可能不使用它

postgres=# SET enable_seqscan = on;
SET

postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id %2 = 1;
                                          QUERY PLAN                                          
----------------------------------------------------------------------------------------------
 Seq Scan on foo  (cost=0.00..2.50 rows=1 width=4) (actual time=0.038..0.072 rows=50 loops=1)
   Filter: ((id % 2) = 1)
   Rows Removed by Filter: 50
 Planning Time: 0.152 ms
 Execution Time: 0.117 ms
(5 rows)

分类

GUC 配置项, 规划器

反馈

在此处 提交有关“enable_seqscan”的任何评论、建议或更正