更新日期:2024年09月11日
OUTER JOIN 的WHERE 部分如果有OR 条件,
GBase 8a MPP Cluster 在执行时会
先做JOIN,后做WHERE 部分的过滤,性能太差,为解决or 运算以及“OUTER
JOIN+OR”的性能问题,引入or 优化机制。
1.
优化特性:
将含有OR 的一系列单表条件组织为一个复合条件,这样,从总体看,这个
复合条件与普通的单表条件没有区别,
即从最外层看,
相当于没有OR 条件,
这样也解决了OUTER JOIN + OR 的性能问题。
例如:
WHERE t1.a > 0 AND (t1.b > 0 OR t1.c > 0)
原有执行逻辑会将条件展开为只有最外层为or 条件,内层全为and 条件:
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1333
WHERE (t1.a > 0 AND t1.b > 0) OR(t1.a > 0 AND t1.c > 0)
在新的机制下,优化后的逻辑为:
WHERE t1.a > 0 AND filter_condtition(t1)
filter_condtition(t1) := t1.b > 0 OR t1.c > 0
优化前提是用OR 连接的一系列条件只能与一个表相关,这样的条件才能优
化为一个复合条件。
2.
优化限制:
对于与多个表相关的OR 条件,不能优化,因为实际应用中的绝大多数OR
条件都是只与一个表相关,如果是与多个表相关,那么用最原始的执行逻辑
就可以了。
3.
优化参数:
参数_gbase_optimizer_or_condition 控制是否使用新的OR 优化,
默认为开启。