知用网
柔彩主题三 · 更轻盈的阅读体验

union all比union快吗

发布时间:2025-12-14 08:10:41 阅读:31 次

在写SQL查询时,经常需要把多个查询结果合并成一张表。这时候很多人会用到 UNION 或者 UNION ALL。但你有没有发现,有时候查得特别慢?其实,选对这两个关键字,速度可能差好几倍。

UNION 和 UNION ALL 有啥不一样

UNION 的作用是把两个查询结果合并,并自动去掉重复的行。而 UNION ALL 是直接拼接,不管有没有重复,全都照单全收。

举个例子,假设你在整理公司员工的打卡记录,两个部门分别导出了一份名单,里面有些员工重名。用 UNION 会帮你去重,只留一个;而 UNION ALL 就是简单粗暴地合在一起,哪怕名字一样也照加不误。

为什么 UNION ALL 更快

关键就在“去重”这个动作上。UNION 在合并完数据后,会自动对结果做一次去重操作,通常是通过排序或哈希比对来实现的。这个过程要消耗CPU和内存,数据量越大,拖得越慢。

UNION ALL 不做任何额外处理,就是单纯地把两堆数据摞起来,自然省时省力。

实际例子对比

比如有两张销售表,想查所有订单:

SELECT order_id FROM sales_jan
UNION
SELECT order_id FROM sales_feb;

这段代码会去重,但如果一月和二月的订单本来就不会重复,那去重就是白忙活。

换成下面这句,速度立马提升:

SELECT order_id FROM sales_jan
UNION ALL
SELECT order_id FROM sales_feb;

什么时候该用哪个

如果你确定两个结果集没有重复数据,或者你压根不需要去重,那就果断用 UNION ALL。比如按时间分表的场景,每天的数据独立,合起来也不会重复,这时候用 UNION 反而是浪费资源。

只有当你真的担心数据重复影响结果时,才用 UNION。比如从不同系统导入用户信息,可能会有相同手机号的记录,这时去重就有必要了。

日常写查询,别图省事默认用 UNION,先想想是不是真需要去重。一个小选择,可能让报表从10秒变成1秒。