enable_seqscan

控制顺序扫描使用的服务器参数

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

enable_seqscan 添加于 PostgreSQL 7.0

默认值

enable_seqscan 的默认值为:on

用法

如果设置为 off,则计划程序将被劝阻使用顺序扫描。

但是,不可能完全禁用顺序扫描,特别是如果没有任何其他扫描类型可用或可行时。

按 PostgreSQL 版本分列的详细信息

enable_seqscan (PostgreSQL 17)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 16)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 15)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 14)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 13)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 12)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 11)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 10)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.6)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.5)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  
待重启 false

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.4)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.3)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.2)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.1)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 9.0)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 8.4)

设置 on
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 on
重置值 on
源文件  
源代码行  

文档: enable_seqscan

enable_seqscan (PostgreSQL 8.3)

设置  
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 bool
来源 默认
最小值  
最大值  

文档: enable_seqscan

enable_seqscan (PostgreSQL 8.2)

设置  
单位  
类别 查询优化 / 计划程序方法配置
简短描述 启用计划程序使用顺序扫描计划。
额外描述  
上下文 用户
变量类型 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”的评论、建议或更正 此处