#优化前:110s,优化后:0.185s
要善于查看执行计划:unique的cost是最大的,占到了很多。
情形一:子查询中多用union。
我们都知道,最小范围unique可以提高速度,因此在sql子查询中,尽可能避免写union all,如果逻辑上改变不了,那么就改成union先实现内部排重;例子:
select .... from A
left join (
(select .... from B)B1 union (select ... from C)C1 on B1.id=C1.id
)B2
on A.id=B2.id
情形二:非子查询查询结果合并union all要比union 效率高,但是业务上要保证各个部分数据不重复。
例子:
select .... from A
union all
select .... from B
union all
...