union和union all的区别,union 和 union all + group by 去重效果

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

sql语法:

select id,`name` FROM stu
union
select id,`name` from stu2

在此建了两张表来比较union和union all的区别:

stu

stu2

建表语句:

CREATE TABLE stu(
id INT PRIMARY KEY,
`name` VARCHAR(20),
age INT,
`work` VARCHAR(20)
);

INSERT INTO stu (id,`name`,age,`work`) VALUES
(1,'张三',18,'学生'),
(2,'李四',30,'程序员'),
(3,'王五',26,'医生'),
(4,'赵六',36,'教师'),
(5,'赵四',38,'农民');

我们先看一下union操作的结果:

再看一下union all

可以看出来union把两个结果集进行了去重,而union把两个表的结果都展示出来

咱们再看看union all + group by的去重效果:

他和union去重效果是一样,那么咱们就看一下他们两个谁的执行效率更高一点呢,我们可以看他的执行计划 EXPLAIN

推荐一个博客讲解很细:https://blog.csdn.net/wuseyukui/article/details/71512793

咱们这里就看一下执行时间对比一下

①show profiles; 
②how variables;查看profiling 是否是on状态; 
③ 如果是off,则 set profiling = 1; 
④执行自己的sql语句; 
⑤ show profiles;就可以查到sql语句的执行时间;

一般情况下咱们的profiling是1,在执行的时候他也会自己set成1

这个是union的执行时间

然后我们看一下union all+group by 的执行时间:

很显然union的执行时间更短,效率也比union all+group by更高(还是要分不同的场景来使用)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值