暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gbase8a MPP OR优化

无涯有涯 2022-09-05
456


OUTER JOINWHERE部分如果有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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论