enable_seqscan
是一个 配置参数,用于确定计划程序是否应该使用顺序扫描。
enable_seqscan
在 PostgreSQL 7.0 中添加。
默认值
enable_seqscan
的默认值为:on
。
用法
如果设置为 off
,则计划程序将被劝阻使用顺序扫描。
但是,无法完全禁用顺序扫描,特别是如果不存在或不可行其他扫描类型时。
按 PostgreSQL 版本分列的详细信息
enable_seqscan (PostgreSQL 18)
设置 |
on |
单位 |
|
类别 |
查询调整/计划程序方法配置 |
简短描述 |
启用计划程序使用顺序扫描计划。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
bool |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
启动值 |
on |
重置值 |
on |
源文件 |
|
源代码行 |
|
待重启 |
false |
文档: enable_seqscan
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)