random_page_cost

一个 GUC 设置,用于设置随机获取磁盘页面的成本

random_page_cost 是一个用于设置规划器对非顺序获取磁盘页面的成本估算的配置参数

random_page_costPostgreSQL 7.0 中添加。

默认值

random_page_cost 的默认值为:4.0

用法

random_page_cost 是一个全局 GUC,对所有数据库有效。但是,可以使用以下方法为单个表空间设置它:

ALTER TABLESPACE ... SET ( random_page_cost = ...)

如果不同的值更适合它们存储的介质。请注意,如果为表空间设置,则无法覆盖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)

分类

GUC 配置项规划器

另请参阅

seq_page_cost, cpu_tuple_cost, cpu_index_tuple_cost, cpu_operator_cost

反馈

提交关于 "random_page_cost" 的任何评论、建议或更正 在此