UNION 和 UNION ALL 的核心区别在于是否自动去除重复行以及由此带来的性能差异:
UNION 会合并结果并自动去重,但执行较慢;
UNION ALL 直接拼接所有结果(包括重复行),因此速度更快。
功能差异
- 去重机制:
- UNION:自动去除结果集中的重复行,确保最终结果唯一。
- UNION ALL:保留所有行,包括完全重复的记录。
- 结果顺序:
- UNION:可能因去重隐含排序操作,但顺序不固定。
- UNION ALL:严格按原始查询顺序堆叠结果。
性能对比
- 执行效率:
- UNION ALL 性能显著更高,因其省去去重步骤,仅需流式拼接数据。
- UNION 较慢,需额外排序和比较重复行,尤其在大数据量时可能触发临时表存储和磁盘I/O。
- 资源消耗:
- UNION 的排序去重操作会增加CPU、内存及I/O开销。
- UNION ALL 资源消耗与数据量成正比,无额外负担。
使用场景
- 优先用 UNION ALL:
- 数据量庞大且允许重复(如日志合并、跨库查询)。
- 已通过其他方式确保数据唯一性。
- 必须用 UNION:
- 需强制去重(如多源客户数据清洗)。
- 业务要求结果集绝对唯一。
提示:若确认无重复且无需排序,UNION ALL 是性能首选;否则需权衡数据唯一性与执行效率。