or_to_any_transform_limit

一个提议的 GUC,用于控制如何将多个 OR 表达式分组到 ANY
此条目涉及一个提议的 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”的任何评论、建议或更正 此处