mysql groupBy和distinct区别,以及性能差异

转自:

https://blog.csdn.net/qdqht2009/article/details/79202799

https://blog.csdn.net/qq_33314107/article/details/80424155

仅做个人笔记,浏览请看原贴


 

groupBy和distinct区别

在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user:

mysql groupBy和distinct区别,以及性能差异_第1张图片

用distinct来返回不重复的用户名:select distinct name from user;,结果为:

这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:select distinct name,id from user;,这样的结果为:

mysql groupBy和distinct区别,以及性能差异_第2张图片
distinct name,id 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录,如果sql这样写:select id,distinct name from user,这样mysql会报错,因为distinct必须放在要查询字段的开头。

所以一般distinct用来查询不重复记录的条数。

如果要查询不重复的记录,有时候可以用group by :

select id,name from user group by name;

select max(age),name from user group by name;

 

性能差异

加了索引之后 distinct 比没加索引的 distinct 快了 107倍。

加了索引之后 group by 比没加索引的 group by 快了 43倍。

再来对比 :distinct  和 group b

不管是加不加索引 group by 都比 distinct 快。因此使用的时候建议选 group by

详情:https://blog.csdn.net/qq_33314107/article/details/80424155

你可能感兴趣的:(数据库)