这些设置可在 system.settings 中查看,且由 源代码 自动生成。
query_plan_aggregation_bucket_top_k
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.9 | 1 | 用于切换一项查询计划级别优化的新设置:当最终聚合的输出经由带 LIMIT n 的 ORDER BY 排序,且能够证明每个桶的选择结果准确时,该优化仅物化每个两级桶中排名前 n 的组。 |
切换一项查询计划级别的优化:当最终聚合的输出经由带有 LIMIT n 的 ORDER BY 排序,且计划能够证明每个桶的选择结果准确时,该优化会在聚合的最终转换过程中,仅按此顺序物化每个两级桶中排名前 n 的组。结果准确无误:未进入所在桶前 n 名的组,在全局范围内至少有 n 个组排在它之前,因此不可能进入全局前 n 名。
仅当设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_aggregation_in_order
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 22.12 | 1 | 启用与查询计划相关的一些重构 |
控制是否启用按序聚合的查询计划级别优化。
仅当设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_convert_any_join_to_semi_or_anti_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.9 | 1 | 新设置。 |
如果 JOIN 之后的过滤器对未匹配行或已匹配行的求值结果始终为 false,则允许将 ANY JOIN 转换为 SEMI 或 ANTI JOIN
query_plan_convert_join_to_in
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 0 | 新增设置 |
如果输出列仅关联左表,则允许将 JOIN 转换为使用 IN 的子查询。对于非 ANY JOIN (例如默认的 ALL JOIN) ,这可能会导致结果错误。
query_plan_convert_outer_join_to_inner_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.4 | 1 | 如果 `JOIN` 之后的过滤器总是会过滤掉默认值,则允许将 `OUTER JOIN` 转换为 `INNER JOIN` |
如果 JOIN 之后的过滤器总是会过滤掉默认值,则允许将 OUTER JOIN 转换为 INNER JOIN
query_plan_direct_read_from_text_index
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.2 | 1 | 文本索引现已 GA |
| 25.9 | 1 | 新增设置。 |
允许在查询计划中仅使用倒排文本索引进行全文检索筛选。
query_plan_display_internal_aliases
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.9 | 0 | 新设置 |
在 EXPLAIN PLAN 中显示内部别名 (如 __table1) ,而非显示原始查询中指定的别名。
query_plan_enable_multithreading_after_window_functions
在计算窗口函数后启用多线程,以支持并行流处理
query_plan_enable_optimizations
控制是否在查询计划层启用查询优化。
可能的值:
- 0 - 禁用查询计划层的所有优化
- 1 - 启用查询计划层的优化 (但仍可通过各自的设置禁用单项优化)
query_plan_execute_functions_after_sorting
切换一项查询计划级别的优化,该优化会将表达式移到排序步骤之后执行。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_filter_push_down
用于切换一项查询计划级别的优化,该优化会将过滤器下推到执行计划的更底层。 仅当设置 query_plan_enable_optimizations 为 1 时才会生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_fuse_filter_into_array_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.9 | 1 | 新增优化:将针对 ARRAY JOIN 后列的过滤器融合到 ARRAY JOIN 步骤中,默认启用。 |
启用或禁用一项查询计划级别的优化:将针对 ARRAY JOIN 后元素列的过滤器融合到 ARRAY JOIN 步骤中,在展开前按元素筛选数组,确保被过滤掉的元素不会被展开或复制。
仅当设置 query_plan_enable_optimizations 为 1 时生效。
query_plan_join_shard_by_pk_ranges
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 0 | 新增设置 |
如果两个表的连接键都包含 PRIMARY KEY 的前缀,则对 JOIN 启用分片。支持哈希、parallel_hash、full_sorting_merge 和 parallel_full_sorting_merge 算法。通常不会加速查询,但可能会降低内存消耗。
query_plan_join_swap_table
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.12 | auto | 新设置。此前始终选择右表。 |
确定在查询计划中,JOIN 的哪一侧应作为 build 表 (也称 inner,即在 hash join 中插入哈希表的一侧) 。此设置仅支持带有 JOIN ON 子句的 ALL join strictness。可能的值包括:
- 'auto':由 planner 决定使用哪个表作为 build 表。
- 'false':从不交换表 (右表为 build 表) 。
- 'true':始终交换表 (左表为 build 表) 。
query_plan_lift_up_array_join
用于切换一项查询计划级别的优化,该优化会在执行计划中将 ARRAY JOIN 上提。 仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_lift_up_union
用于切换一项查询计划级别的优化:将查询计划中更大的子树提升到 union 中,以便进一步优化。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_max_limit_for_join_lazy_indexing
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 1000 | 新增设置,用于控制可使用查询计划进行 JOIN 惰性索引优化时允许的最大 LIMIT 值。若为 0,则不受限制 |
控制可在 JOIN 中使用查询计划进行惰性索引优化时允许的最大 LIMIT 值。若为 0,则不受限制。
query_plan_max_limit_for_lazy_materialization
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 10 | 新增设置,用于控制可对惰性物化优化使用查询计划的最大 LIMIT 值。若为 0,则不受限制 |
| 25.12 | 10000 | 在性能提升后增大该限制值 |
| 25.11 | 100 | 进一步优化 |
控制可对惰性物化优化使用查询计划的最大 LIMIT 值。若为 0,则不受限制。
query_plan_max_limit_for_top_k_optimization
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.12 | 1000 | 新设置。 |
控制允许使用 minmax 跳过索引和动态阈值筛选来评估 TopK 优化查询计划的最大 LIMIT 值。如果为 0,则不设限制。
此设置还控制 enable_group_by_top_k_optimization 的行为。
query_plan_max_optimizations_to_apply
限制应用到查询计划上的优化总次数,参见设置 query_plan_enable_optimizations。 可用于避免复杂查询的优化耗时过长。 在 EXPLAIN PLAN 查询中,达到此限制后将停止继续应用优化,并按原样返回查询计划。 对于常规查询执行,如果实际优化次数超过此设置,则会抛出异常。
query_plan_max_set_size_for_projection_match
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 10000 | 新增设置,用于限制投影匹配器中对 `IN` 子句集合进行内容哈希的成本(当前:聚合投影)。超过该限制的集合会被视为不匹配。值为 0 时将完全禁用内容哈希比较(兼容性取值:对于包含 `IN` 集合的节点,投影匹配永远不会成功)。 |
在判断两个 IN 子句集合是否相等时,投影匹配器会计算并比较其内容哈希;此设置定义了可执行该操作的最大行数。超过此值的集合会被视为不匹配,并跳过该投影。值为 0 时将完全禁用内容哈希比较:对于包含 IN 子句集合的节点,投影匹配将永远不会成功。
该设置由聚合投影匹配器使用 (以及未来任何需要比较 IN 子句集合的投影匹配器) 。计算内容哈希的复杂度相对于集合中元素数量为 O(N log N);当查询或投影中出现大量 IN 子句时,此设置可限制规划阶段的开销。
query_plan_max_step_description_length
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.9 | 500 | 新增设置 |
EXPLAIN PLAN 中步骤描述的最大长度。
query_plan_merge_expression_into_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.7 | 1 | 新设置。允许在 JOIN 重排序优化过程中将 Expression 步骤合并到 JOIN 步骤中。 |
允许在 JOIN 重排序优化过程中将表达式合并到 JOIN 步骤中。
query_plan_merge_expressions
用于启用或禁用一项会合并连续过滤器的查询计划级别的优化。 仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_merge_filter_into_join_condition
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 1 | 新增了将过滤条件合并到 JOIN 条件中的设置 |
允许将过滤条件合并到 JOIN 条件中,并将 CROSS JOIN 转换为 INNER JOIN。
query_plan_merge_filters
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.7 | 0 | 允许在查询计划中合并过滤器 |
| 24.11 | 1 | 允许在查询计划中合并过滤器。这是正确支持 analyzer 的过滤器下推所必需的。 |
允许在查询计划中合并过滤器。
query_plan_min_columns_for_join_lazy_indexing
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 3 | 控制启用 JOIN 中惰性索引优化时左侧所需的最小载荷列数 |
控制启用 JOIN 中惰性索引优化时左侧所需的最小载荷列数。0 表示禁用此优化。
query_plan_optimize_count_from_text_index
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 新增设置 |
允许直接利用文本索引倒排列表的基数执行 SELECT count() ... WHERE <text search predicate>,无需具体化匹配的行。
仅在启用 query_plan_direct_read_from_text_index 时生效。
query_plan_optimize_join_order_algorithm
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.12 | greedy | 新的实验性设置。 |
指定在优化查询计划时要尝试哪些 JOIN 顺序算法。可用算法如下:
- 'greedy' - 基础贪心算法 - 速度快,但不一定能生成最佳 JOIN 顺序
- 'dpsize' - 实现 DPsize 算法,目前仅支持 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案,但对于包含大量表和 JOIN 谓词的查询可能较慢。
- 'dpsub' - 实现 DPsub 算法,同时支持 INNER JOIN 和非 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案,但对于包含大量表和 JOIN 谓词的查询可能较慢。
- 'dphyp' - 实现 DPhyp (通过超图分区进行动态规划) 算法,目前仅支持 INNER JOIN - 探索与
dpsize相同的搜索空间,但只枚举连通子图对,因此在稀疏 JOIN 图上生成的中间 JOIN 更少,代价是不考虑笛卡尔积 可以将多个算法指定为逗号分隔的列表,例如dphyp,greedy。系统会按顺序尝试这些算法;如果某个算法无法处理该查询 (例如由于存在 OUTER JOIN 或不连通分量) ,则会回退到下一个算法。
query_plan_optimize_join_order_limit
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.9 | 1 | 新增设置 |
| 25.12 | 10 | 默认允许对更多表进行 JOIN 重排序 |
优化同一子查询中 JOIN 的顺序。目前仅支持极少数情况。 值表示可优化的最大表数量。
query_plan_optimize_join_order_max_searched_plans
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 100000 | 用于限制 JOIN 顺序优化器在回退到下一个算法之前可枚举的部分计划数量的新设置。 |
JOIN 顺序优化器在放弃当前算法并回退到 query_plan_optimize_join_order_algorithm 中的下一个算法之前,可枚举的部分计划最大数量。
该设置会以确定性的方式限制优化时间 (与实际时钟时间无关) ,适用于团状或星状等稠密 JOIN 图,因为这类场景中的搜索空间会呈指数级增长。
设置为 0 可禁用此限制。对默认的 query_plan_optimize_join_order_limit 没有影响,因为在默认情况下,搜索规模始终远低于此上限。
query_plan_optimize_join_order_randomize
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.4 | 0 | 用于测试的新增设置,可随机化 JOIN 顺序统计信息。 |
当该值非 0 时,JOIN 顺序优化器会使用随机生成的基数和 NDV,而不是真实的统计信息。 当设置为 1 时,会生成一个随机种子;当设置为大于 1 的值时,则直接使用该值作为种子。 此设置用于测试,以发现由不同 JOIN 顺序引起的错误。
query_plan_optimize_lazy_final
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.4 | 0 | 新增设置:通过基于集合的索引分析,优化从 ReplacingMergeTree 使用 FINAL 读取 |
通过构建主键集合并将其用于索引分析,优化从 ReplacingMergeTree 使用 FINAL 读取时的性能。
query_plan_optimize_lazy_materialization
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.4 | 1 | 新增设置:使用查询计划进行惰性物化优化 |
使用查询计划进行惰性物化优化。
query_plan_optimize_lazy_materialization_for_file
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 新增设置:对通过 `file` 表函数和 `File` 表引擎读取本地 Parquet 文件的 `ORDER BY ... LIMIT n` 查询使用惰性物化。 |
对通过 file 表函数和 File 表引擎读取本地 Parquet 文件启用惰性物化优化:对于 ORDER BY ... LIMIT n 查询,仅针对通过 LIMIT 保留下来的 n 行读取排序和筛选所不需要的列。仅当 query_plan_optimize_lazy_materialization 已启用时生效。
query_plan_optimize_lazy_materialization_for_object_storage
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.9 | 1 | 新增设置:对从对象存储(包括 Iceberg 表)读取 Parquet 文件的 `ORDER BY ... LIMIT n` 查询使用惰性物化。 |
| 26.8 | 1 | 新增设置:对从对象存储(包括 Iceberg 表)读取 Parquet 文件的 `ORDER BY ... LIMIT n` 查询使用惰性物化。 |
| 26.7 | 1 | 新增设置:对从对象存储(包括 Iceberg 表)读取 Parquet 文件的 `ORDER BY ... LIMIT n` 查询使用惰性物化。 |
对从对象存储 (包括 Iceberg 表) 读取 Parquet 文件时使用惰性物化优化:对于 ORDER BY ... LIMIT n 查询,仅对经 LIMIT 保留的 n 行读取排序和筛选不需要的列。仅当启用 query_plan_optimize_lazy_materialization 时生效。
query_plan_optimize_prewhere
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 24.2 | 1 | 允许将过滤器下推到受支持存储的 PREWHERE 表达式 |
允许将过滤器下推到受支持存储的 PREWHERE 表达式
query_plan_push_down_limit
控制是否启用一项查询计划级别的优化:将 LIMIT 下推到执行计划的更低层级。 仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_push_down_volume_reducing_functions
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 新增设置:将减少数据量的函数(`length`、`lengthUTF8`、`empty`、`notEmpty`)下推到 `Sorting` 和 `Filter` 步骤之后,以固定大小的结果替换宽参数列。previous_value=false,因此将 `compatibility` 设置为 26.8 之前的版本时,会恢复原有行为(不下推)。 |
启用或禁用一项查询计划级别的优化:在执行计划中,将减少数据量的函数 (length、lengthUTF8、empty、notEmpty)
下推到 Sorting 和 Filter 步骤之后。固定大小的结果会替换宽 String / FixedString
参数,因此该参数无需再经过这些步骤传递。
仅当参数列在被下推步骤之前不再需要时,才会应用此重写。
仅当设置 query_plan_enable_optimizations 为 1 时,此设置才生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_push_limit_by_into_sort
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 1 | 新设置:当 LIMIT BY 的列是 ORDER BY 的前缀时,将按每个流执行的 LIMIT BY 下推到排序管道中,从而减少流经最终合并的行数。 |
控制 ORDER BY ... LIMIT BY 查询的一项查询计划级别的优化。当 LIMIT BY 的列是 ORDER BY 子句的前缀时,每个并行排序流都会在合并成一个流之前先执行 LIMIT BY,从而减少最终合并以及后续管道阶段需要处理的行数。对于 LIMIT BY 会丢弃大量行的查询,这项优化可提升速度。
仅当设置 query_plan_enable_optimizations 为 1 时,此设置才会生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order
用于开启或关闭按顺序读取的查询计划级别优化。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可选值:
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order_through_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.12 | 1 | 新设置 |
在 JOIN 操作中保持按顺序从左表读取,以便后续步骤加以利用。
query_plan_remove_redundant_distinct
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 23.2 | 1 | 移除查询计划中冗余的 Distinct 步骤 |
用于控制是否启用一项查询计划级别的优化,该优化会移除冗余的 DISTINCT 步骤。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_remove_redundant_sorting
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 23.1 | 1 | 移除查询计划中的冗余排序。例如,移除与子查询中 ORDER BY 子句相关的排序步骤 |
控制一项查询计划级别的优化,用于移除冗余的排序步骤,例如子查询中的排序步骤。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_remove_unused_columns
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.12 | 1 | 新设置。新增一项优化,用于从查询计划步骤中移除未使用的列。 |
用于控制一项查询计划级别的优化开关,该优化会尝试从查询计划步骤中移除未使用的列 (包括输入列和输出列) 。 仅当设置 query_plan_enable_optimizations 为 1 时才会生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_reuse_storage_ordering_for_window_functions
别名: optimize_read_in_window_order
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.1 | 0 | 默认禁用此逻辑。 |
切换一项查询计划级别的优化,在对窗口函数进行排序时复用存储排序。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_short_circuit_constant_false_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.8 | 1 | 新增设置:当 JOIN 的 ON 条件为常量 false 时进行短路,避免读取无法产生结果的一侧。previous_value=false,因此将 `compatibility` 设为 26.8 之前的版本可恢复原有行为(不进行短路)。 |
对于 ON 条件可折叠为常量 false 的 JOIN,将无法产生行的每个输入侧替换为空源 (INNER/CROSS/SEMI 为两侧,LEFT/RIGHT 为非保留侧) ,从而避免读取无法产生结果的一侧。适用于 analyzer (enable_analyzer = 1) 和非分布式查询计划。
query_plan_split_filter
用于切换一种将过滤器拆分为表达式的查询计划级别的优化。 仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_text_index_add_hint
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.12 | 1 | 新设置 |
允许为查询计划中基于倒排文本索引构建的过滤器添加 hint (附加谓词) 。
query_plan_top_k_through_join
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.5 | 1 | 新增设置,用于启用一种查询计划级别的优化:当排序键仅引用保留侧时,将 ORDER BY ... LIMIT n 下推到 LEFT/RIGHT 连接中。 |
用于切换一种查询计划级别的优化:当排序键仅引用连接保留侧 (LEFT/RIGHT) 的列时,将 ORDER BY ... LIMIT n 下推到连接之前。该优化会限制保留侧输入在连接前需要生成的行数。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_try_use_vector_search
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.1 | 1 | 新设置。 |
控制是否启用一项会尝试使用向量相似度索引的查询计划级别的优化。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用