random_page_cost 是一个 配置参数,用于设置查询规划器对非顺序读取的磁盘页面的成本估算。
random_page_cost 在 PostgreSQL 7.0 中添加。
默认
random_page_cost 的默认值为:4.0。
用法
random_page_cost 是一个全局 GUC,对所有数据库都有效。但可以使用
ALTER TABLESPACE ... SET ( random_page_cost = ...)
如果不同值对于存储介质更合适。请注意,如果为表空间设置了该参数,random_page_cost 将无法被覆盖。
按 PostgreSQL 版本详细信息
random_page_cost (PostgreSQL 19)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 18)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 17)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 16)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 15)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 14)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 13)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 12)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 11)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 10)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 9.6)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 9.5)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:random_page_cost
random_page_cost (PostgreSQL 9.4)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 9.3)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 9.2)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 9.1)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 9.0)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 8.4)
| 设置 |
4 |
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
| 枚举值 |
|
| 启动值 |
4 |
| 重置值 |
4 |
| 源文件 |
|
| 源行 |
|
文档:random_page_cost
random_page_cost (PostgreSQL 8.3)
| 设置 |
|
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
文档:random_page_cost
random_page_cost (PostgreSQL 8.2)
| 设置 |
|
| 单位 |
|
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置规划器对非顺序读取的磁盘页面的成本估算。 |
| 扩展描述 |
|
| 上下文 |
user |
| 变量类型 |
实数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
1.79769e+308 |
文档:random_page_cost
变更历史
示例
给定一个任意大的表,当 random_page_cost 设置为默认值 4 时,PostgreSQL 会选择索引扫描。
postgres=# CREATE TABLE foo (id INT NOT NULL PRIMARY KEY);
CREATE TABLE
postgres=# INSERT INTO foo values(generate_series(1,10000000));
INSERT 0 10000000
postgres=# SHOW random_page_cost;
random_page_cost
------------------
4
(1 row)
postgres=# EXPLAIN SELECT * FROM foo WHERE id BETWEEN 1000000 and 2000000;
QUERY PLAN
-----------------------------------------------------------------------------------
Index Only Scan using foo_pkey on foo (cost=0.43..32073.10 rows=1035633 width=4)
Index Cond: ((id >= 1000000) AND (id <= 2000000))
(2 rows)
然而,如果 random_page_cost 被设置为一个(不切实际地高的)值,PostgreSQL 将会认为顺序扫描更有效率(尽管在现实中可能并非如此)。
postgres=# SET random_page_cost to 4000;
SET
postgres=# EXPLAIN SELECT * FROM foo WHERE id BETWEEN 1000000 and 2000000;
QUERY PLAN
--------------------------------------------------------------
Seq Scan on foo (cost=0.00..194248.72 rows=1035633 width=4)
Filter: ((id >= 1000000) AND (id <= 2000000))
(2 rows)
另请参阅
seq_page_cost, cpu_tuple_cost, cpu_index_tuple_cost, cpu_operator_cost