MySQL中去重 distinct 和 group by 是如何去重的

文章探讨了SQL中的DISTINCT和GROUPBY在数据去重时的不同用法。DISTINCT对所有字段进行全字段去重,而GROUPBY能针对单个字段去重。在处理大数据量时,GROUPBY由于其分组机制,速度可能更快。测试示例展示了这两种方法的使用和效果。
摘要由CSDN通过智能技术生成

1:测试数据

CREATE TABLE student (
   stu_no  VARCHAR(40) NOT NULL,
   name VARCHAR(100) NOT NULL
);
 
insert into  student values('1','name1');
insert into  student values('2','name2');
insert into  student values('3','name1');
insert into  student values('4','name2');
insert into  student values('5','name1');
 

 测试1:对name 字段进行过滤

SELECT DISTINCT `name` FROM student;

 测试2:对所有的字段进行去重。

SELECT DISTINCT * FROM student;

 

对比测试1和测试2 发现,

distinct 可以对单一字段进行去重,当对所有的字段去重时,只有不同数据的每个字段完全一样的数据被去掉,其他只有一个字段重复的数据并没有变化,因此得出结论:

distinct主要是针对全部字段去重,即去掉完全一样的数据。、

测试3:

select stu_no,name from student group by name;
select stu_no,name from student group by stu_no;

 

 

总结:

    相同:distinct和group by都可以用来去重
    不同之处,distinct针对全部字段去重,而group by可以针对全部字段中的单一字段去重。
    两者执行方式不同,distinct主要是对数据两两进行比较,需要遍历整个表。group by分组类似先建立索引再查索引,当数据量较大时,group by速度要优于distinct。
 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大怪~将军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值