写在前面
都具有分组的作用,但是推荐使用GROUP BY ,原因写在下面。
GROUP BY (分组/去重)
······用于对选定字段列进行分组。它会先根据后接字段进行排序,之后保留第一行数据以实现去重。
优势
- GROUP BY 在有索引的情况下可以使用索引
- GROUP BY 操作场景更加广泛;
劣势
在MySQL8.0之前,GROUP BY不仅仅具有分组的作用,实际上他还会根据后接字段进行隐式排序。如果在无法使用索引排序的情况下,GROUP BY语句的效率会变得很低。
DISTINCT (去重)
用于返回唯一且不同的值。
对关键字 DISTINCT后接所有字段生效,所以说 使用GROUP BY 更加丰富多样,适应更多需求。
对于多列去重,即所有被指定的字段列的值都相同,才会被认为是重复列。
注:
DISTINCT也会使用索引。
总结
- 在使用索引的情况下,两者效率基本相同,且 GROUP BY 的使用范围更加广泛,所以选择使用 GROUP BY。
- 在不使用索引的情况下,如果是MySQL8以前,肯定能使用DISTINCT则不适用GROUP BY,但是如果使用 MySQL8以及之后版本,则考虑到它的多用性,使用GROUP BY。
综上所述,我们尽量使用GROUP BY而不是 DISTINCT。