or_to_any_transform_limit

一个建议的GUC,用于控制如何将多个OR表达式分组到ANY
此条目与PostgreSQL的一个功能相关,该功能是PostgreSQL 17的一部分,预计将于2024年底发布。
此条目与一个建议的PostgreSQL功能相关,该功能在公开发布前已被撤回。

or_to_any_transform_limit是一个建议的配置参数,用于指定OR表达式中的最小元素数量,超过该数量后,计划程序将把多个类似的OR表达式分组为ANY表达式。

or_to_any_transform_limitPostgreSQL 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

更改历史记录

示例

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)

分类

GUC配置项计划程序已撤回

另请参阅

from_collapse_limit,join_collapse_limit

反馈

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