optimize_and_compare_chain
<、<=、>、>=、= 运算符及其混合使用。例如,(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
optimize_and_compare_chain 优化的工作预算以 getTreeHash 哈希的查询树节点数来衡量 (这是该优化的主要开销) 。一旦某个查询在应用该优化时哈希的节点数超过此值,就会在该查询的剩余部分停止应用该优化。这可以限制包含大量或超长比较 AND 链的查询的分析时间;否则,该优化可能在没有折叠任何内容的情况下占用大部分分析时间。提前停止始终是安全的:它只会放弃一次优化机会,绝不会改变结果。设为 0 可禁用此预算 (无限制) 。