这些设置可在 system.settings 中查看,并根据 源代码 自动生成。
optimize_and_compare_chain
类型
Bool
默认值
1
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.2 | 1 | 新设置 |
在 AND 链中推导并补全与常量的比较条件,以增强过滤能力。支持 <、<=、>、>=、= 运算符及其混合使用。例如,(a < b) AND (b < c) AND (c < 5) 会变为 (a < b) AND (b < c) AND (c < 5) AND indexHint(b < 5) AND indexHint(a < 5)。推导出的比较条件会包装在 indexHint 中:它们参与索引分析 (主键、分区键、跳过索引) 并裁剪读取集合,但每行不产生开销,也不影响 PREWHERE。通过不同表的表达式推导出的比较条件仍可执行 ((t1.a < t2.b) AND (t2.b < 5) 会推导出普通条件 t1.a < 5) :这是唯一能够下推到 JOIN 之下的条件,可在原始链无法触及的位置过滤 JOIN 输入。与现有条件矛盾的推导比较条件也会作为普通条件添加,因此 AND 会折叠为 false。
optimize_and_compare_chain_max_hash_work
类型
UInt64
默认值
5000000
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.7 | 5000000 | `optimize_and_compare_chain` 优化的新增设置,用于限制其工作量(以哈希的查询树节点数衡量),从而避免它在包含大量或超长比较 `AND` 链的查询中占用过多查询分析时间。此前的值 `0`(无限制)会复现 26.7 之前的行为,即该优化不设上限,因此将 `compatibility` 设为更早版本时,仍会在没有预算限制的情况下推导传递谓词。设为 `0` 可禁用此预算。 |
在查询分析期间,optimize_and_compare_chain 优化的工作预算以 getTreeHash 哈希的查询树节点数来衡量 (这是该优化的主要开销) 。一旦某个查询在应用该优化时哈希的节点数超过此值,就会在该查询的剩余部分停止应用该优化。这可以限制包含大量或超长比较 AND 链的查询的分析时间;否则,该优化可能在没有折叠任何内容的情况下占用大部分分析时间。提前停止始终是安全的:它只会放弃一次优化机会,绝不会改变结果。设为 0 可禁用此预算 (无限制) 。