此条目与PostgreSQL的一个功能相关,该功能是PostgreSQL 17的一部分,预计将于2024年底发布。
此条目与一个建议的PostgreSQL功能相关,该功能在公开发布前已被撤回。
or_to_any_transform_limit
是一个建议的配置参数,用于指定OR
表达式中的最小元素数量,超过该数量后,计划程序将把多个类似的OR
表达式分组为ANY
表达式。
or_to_any_transform_limit
在PostgreSQL 17中添加,但随后被撤回,等待进一步考虑。
默认
or_to_any_transform_limit
的默认值为:5
。
按PostgreSQL版本详细说明
or_to_any_transform_limit (PostgreSQL 17)
设置 | 5 |
单位 | |
类别 | 查询调优/其他计划程序选项 |
简短描述 | 设置尝试将OR子句转换为ANY的最小列表长度。 |
额外描述 | 达到限制后,计划程序将尝试将类似'x=c1 OR x=c2 ..'的表达式替换为表达式'x = ANY(ARRAY[c1,c2,..])' |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | -1 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 5 |
重置值 | 5 |
源文件 | |
源代码行 | |
需要重启 | 否 |
更改历史记录
示例
or_to_any_transform_limit
的基本用法示例
postgres=# CREATE TABLE foo ( id INT NOT NULL PRIMARY KEY ); CREATE TABLE postgres=# INSERT INTO foo VALUES (generate_series(1,10)); INSERT 0 10 postgres=# SHOW or_to_any_transform_limit; or_to_any_transform_limit --------------------------- 5 (1 row) postgres=# EXPLAIN SELECT * FROM foo WHERE id = 1 OR id = 2 OR id = 3 OR id = 6 OR id = 8; QUERY PLAN ----------------------------------------------------------------------- Bitmap Heap Scan on foo (cost=4.19..12.69 rows=5 width=4) Recheck Cond: (id = ANY ('{1,2,3,6,8}'::integer[])) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.19 rows=5 width=0) Index Cond: (id = ANY ('{1,2,3,6,8}'::integer[])) (4 rows) postgres=# SET or_to_any_transform_limit = 6; SET postgres=# EXPLAIN SELECT * FROM foo WHERE id = 1 OR id = 2 OR id = 3 OR id = 6 OR id = 8; QUERY PLAN ----------------------------------------------------------------------------- Bitmap Heap Scan on foo (cost=20.82..29.34 rows=5 width=4) Recheck Cond: ((id = 1) OR (id = 2) OR (id = 3) OR (id = 6) OR (id = 8)) -> BitmapOr (cost=20.82..20.82 rows=5 width=0) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.16 rows=1 width=0) Index Cond: (id = 1) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.16 rows=1 width=0) Index Cond: (id = 2) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.16 rows=1 width=0) Index Cond: (id = 3) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.16 rows=1 width=0) Index Cond: (id = 6) -> Bitmap Index Scan on foo_pkey (cost=0.00..4.16 rows=1 width=0) Index Cond: (id = 8) (13 rows)
另请参阅
from_collapse_limit,join_collapse_limit