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
更改历史记录
- PostgreSQL 7.0
- 添加 (提交 b1577a7c)
示例
给定以下(简单)表
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)
参考文献
- PostgreSQL 文档: enable_seqscan