cursor_tuple_fraction
是一个用于设置规划器对将检索的游标行数分数的估计值的配置参数。
cursor_tuple_fraction
在PostgreSQL 8.4中添加。
默认值
cursor_tuple_fraction
的默认值为:0.1
。
用法
如果查询正在由游标执行,这意味着可能只会实际检索潜在查询结果的子集,PostgreSQL将尝试优化查询计划。例如,如果作为顺序扫描而不是索引扫描返回整个数据集效率更高,但是对于要检索的数据子集,索引扫描会更快,则它将使用索引扫描。
cursor_tuple_fraction
确定预期通过FETCH
操作检索查询结果的百分比,如果可用,它将选择更适合于数据子集的计划。
按PostgreSQL版本详细说明
cursor_tuple_fraction (PostgreSQL 18)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 17)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 16)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 15)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 14)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 13)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 12)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 11)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 10)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.6)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.5)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
待重启 |
false |
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.4)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.3)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.2)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.1)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 9.0)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
cursor_tuple_fraction (PostgreSQL 8.4)
设置 |
0.1 |
单位 |
|
类别 |
查询调整/其他规划器选项 |
简短描述 |
设置规划器对将检索的游标行数分数的估计值。 |
额外描述 |
|
上下文 |
用户 |
变量类型 |
real |
来源 |
默认值 |
最小值 |
0 |
最大值 |
1 |
枚举值 |
|
引导值 |
0.1 |
重置值 |
0.1 |
源文件 |
|
源代码行号 |
|
文档: cursor_tuple_fraction
更改历史
示例
cursor_tuple_fraction
的使用方法示例 - 首先,设置一个包含 10,000,000 行(已索引)随机数的简单表,并禁用自动真空
将cursor_tuple_fraction
设置为1
(最大值),并将random_page_cost
设置为非常高的值,则会选择顺序扫描
postgres=# BEGIN;
BEGIN
postgres=*# SET random_page_cost TO 1000;
SET
postgres=*# SET cursor_tuple_fraction TO 1;
SET
postgres=*# EXPLAIN
DECLARE cur CURSOR FOR
SELECT * FROM cursor_test ORDER BY val;
QUERY PLAN
----------------------------------------------------------------------------
Sort (cost=40459807.82..40484763.90 rows=9982431 width=8)
Sort Key: val
-> Seq Scan on cursor_test (cost=0.00..188320.31 rows=9982431 width=8)
(3 rows)
但将其降低到0.1
(默认值)会导致索引扫描
postgres=*# SET cursor_tuple_fraction TO 0.1;
SET
postgres=*# EXPLAIN
DECLARE cur CURSOR FOR
SELECT * FROM cursor_test ORDER BY val;
QUERY PLAN
--------------------------------------------------------------------------------------------
Index Only Scan using val_ix on cursor_test (cost=0.43..54989736.90 rows=9982431 width=8)
(1 row)
可以使用实际需要的时间来演示差异,分别使用cursor_tuple_fraction
设置为1
和0.1
来提取10行
postgres=# BEGIN ;
BEGIN
Time: 0.261 ms
postgres=*# SET cursor_tuple_fraction TO 1;
SET
Time: 0.305 ms
postgres=*# DECLARE cur CURSOR FOR
SELECT * FROM cursor_test ORDER BY val;
DECLARE CURSOR
Time: 0.324 ms
postgres=*# FETCH 10 FROM cur;
val
------------------------
4.086947802406371e-08
2.2672169275317344e-07
3.811600721714825e-07
4.729380020940255e-07
5.001395353421145e-07
5.545030219433755e-07
5.911655163171048e-07
6.835541628280595e-07
7.550144764945088e-07
7.852209042980007e-07
(10 rows)
Time: 3699.970 ms (00:03.700)
postgres=*# SET cursor_tuple_fraction TO 0.1;
SET
Time: 0.295 ms
postgres=*# FETCH 10 FROM cur;
val
------------------------
1.0436382211764794e-06
1.0606182454520052e-06
1.3870003436888823e-06
1.4260912035712892e-06
1.5682459066912458e-06
1.7877217302064707e-06
1.8104408385788417e-06
1.9592999442874515e-06
1.974146760508333e-06
2.328882489743833e-06
(10 rows)
Time: 0.311 ms