案例1-关联条件的顺序优化
优化原因:
当前版本的GNode中,LEFT JOIN的ON条件中的右表单表条件会在JOIN之后执行,尤其当LEFT JOIN的右表是大表时,会导致参与JOIN的数据量过大,增加JOIN耗时。
SQL特征
LEFT JOIN语句
ON条件中包含右表的单表条件
优化场景
LEFT JOIN的右表是大表
ON条件中,右表的单表条件过滤后的数据量占右表总数据量比较少(约10%左右)。
注:因为本优化改写是把右表改写为子查询,需要考虑子查询额外的物化消耗,因此不是所有此类SQL改写都能提升性能,尤其是当查询的投影列中出现大量右表列时。
优化效果
通过改写,把右表单表过滤放在一个独立的子查询中,保证右表的过滤在JOIN前执行,达到优化查询性能的目的。
示例语句:
select x1.id2, x2.id2, x2.id3 from x1 left join x2 on x1.id2 = x2.id2 and x2.id3 = 301;
改写后语句
select x1.id2, x.id2, x.id3 from x1 left join (select x2.id2, x2.id3 from x2 where x2.id3 = 301) x;