一、结果集允许重复的话,尽量用 union all 代替 union
【union】不管检索结果有没有重复,都会尝试进行合并,然后在输出最终结果前进行排序、过滤操作,增加大量的 CPU 运算,加大资源消耗及延迟。
【union all】不去重,效率高于 union。当然,union all 的前提条件是两个结果集没有重复数据。或者如果结果集允许重复的话,尽量使用 union all 代替 union 。
二、合并(union all) 两个表并计算表中某个字段的总和
假如表中数据如上表格,查询 a=‘01’ 时 b,c 两个字段的总和,sql语句如下:
select a,sum(b),sum(c) from (
select a,b,c from t1 where a='01'
union all
select a,b,c from t2 where a='01'
) d
group by a;