3 回答
TA贡献1871条经验 获得超8个赞
它们本质上是相互对应的(实际上这是一些数据库DISTINCT
在引擎盖下实现的方式)。
如果其中一个更快,那就是DISTINCT
。这是因为,虽然两者是相同的,但查询优化器必须抓住这样一个事实:你GROUP BY
没有利用任何组成员,只有他们的密钥。DISTINCT
使这个显而易见,所以你可以使用稍微笨拙的优化器。
如有疑问,请测试!
TA贡献2051条经验 获得超10个赞
如果您有索引profession
,则这两个是同义词。
如果你不这样做,那就用吧DISTINCT
。
GROUP BY
在MySQL
各种结果。你甚至可以这样做:
SELECT u.profession FROM users u GROUP BY u.profession DESC
让你的职业按DESC
顺序排序。
DISTINCT
创建一个临时表并使用它来存储重复项。GROUP BY
做同样的事情,但事后对不同的结果进行排序。
所以
SELECT DISTINCT u.profession FROM users u
如果您没有索引,则更快profession
。
TA贡献1839条经验 获得超15个赞
上面的所有答案都是正确的,对于单列上的DISTINCT与单列上的GROUP BY的情况。每个数据库引擎都有自己的实现和优化,如果你关心的差别很小(在大多数情况下),那么你必须针对特定的服务器和特定版本进行测试!随着实施可能会改变......
但是,如果您在查询中选择了多个列,那么DISTINCT本质上是不同的!因为在这种情况下,它将比较所有行的所有列,而不是仅比较一列。
所以如果你有类似的东西:
// This will NOT return unique by [id], but unique by (id,name)SELECT DISTINCT id, name FROM some_query_with_joins// This will select unique by [id].SELECT id, name FROM some_query_with_joins GROUP BY id
认为DISTINCT关键字按行指定的第一列来区分行是一个常见的错误,但DISTINCT是这种方式的通用关键字。
因此,人们必须小心,不要将上述答案视为所有情况的正确答案......您可能会感到困惑并得到错误的结果,而您想要的只是优化!
添加回答
举报