OUTER JOIN的WHERE部分如果有OR条件,GBase 8a MPP Cluster在执行时会先做JOIN,后做 WHERE部分的过滤,性能太差,为解决or运算以及“OUTERJOIN+OR”的性能问题,引入or优化机制。
1. 优化特性:将含有OR的一系列单表条件组织为一个复合条件,这样,从总体看,这个复合条件与普通的单表条件没有区别,即从最外层看,相当于没有OR条件,这样也解决了OUTER JOIN + OR的性能问题。
例如:
WHERE t1.a > 0 AND (t1.b > 0 OR t1.c > 0)
原有执行逻辑会将条件展开为只有最外层为or条件,内层全为and条件:
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优化,默认为开启。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




