为什么不能在使用GROUP BY时使用DISTINCT?

时间:2009-12-11 13:05:04

标签: sql mysql

根据MySQL性能维基的tips

  

当您拥有或可以使用GROUP BY时,请勿使用DISTINCT。

有人可以发布可以使用GROUP BY代替DISTINCT的查询示例吗?

4 个答案:

答案 0 :(得分:8)

如果您知道结果中的两列总是直接相关,那么执行此操作的速度会慢一些:

SELECT DISTINCT CustomerId, CustomerName FROM (...)

比这个:

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId

因为在第二种情况下它只需要比较id,但在第一种情况下它必须比较两个字段。这是MySQL特有的技巧。它不适用于其他数据库。

答案 1 :(得分:1)

SELECT Code
FROM YourTable
GROUP BY Code

VS

SELECT DISTINCT Code
FROM YourTable

答案 2 :(得分:0)

基本规则:将SELECT子句中的所有列放入GROUP BY子句

所以

SELECT DISTINCT a,b,c FROM D

变为

SELECT a,b,c FROM D GROUP BY a,b,c

答案 3 :(得分:-2)

实施例

关系客户(ssnum,名称,邮政编码,地址)PK(ssnum)。 ssnum是社会安全号码。

SQL:

 Select DISTINCT ssnum from customer where zipcode=1234 group by name

此SQL语句为具有邮政编码1234的客户返回唯一记录。最后,结果按名称分组。

这里DISTINCT并非没有必要。因为你选择的ssnum是唯一的,因为ssnun是主键。两个人不能拥有相同的ssnum。

在这种情况下,Select ssnum from customer where zipcode=1234 group by name将提供比“...... DISTINCT .......”更好的性能。

DISTINCT在DBMS中是一项昂贵的操作。