为了账号安全,请及时绑定邮箱和手机立即绑定

什么更快,MySQL中的SELECT DISTINCT或GROUP BY?

什么更快,MySQL中的SELECT DISTINCT或GROUP BY?

皈依舞 2019-08-09 17:44:19
什么更快,MySQL中的SELECT DISTINCT或GROUP BY?如果我有一张桌子CREATE TABLE users (   id int(10) unsigned NOT NULL auto_increment,   name varchar(255) NOT NULL,   profession varchar(255) NOT NULL,   employer varchar(255) NOT NULL,   PRIMARY KEY  (id))我希望获得所有独特的profession字段值,更快(或推荐):SELECT DISTINCT u.profession FROM users u要么SELECT u.profession FROM users u GROUP BY u.profession?
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

它们本质上是相互对应的(实际上这是一些数据库DISTINCT在引擎盖下实现的方式)。

如果其中一个更快,那就是DISTINCT。这是因为,虽然两者是相同的,但查询优化器必须抓住这样一个事实:你GROUP BY没有利用任何组成员,只有他们的密钥。DISTINCT使这个显而易见,所以你可以使用稍微笨拙的优化器。

如有疑问,请测试!


查看完整回答
反对 回复 2019-08-09
?
侃侃无极

TA贡献2051条经验 获得超10个赞

如果您有索引profession,则这两个是同义词。

如果你不这样做,那就用吧DISTINCT

GROUP BYMySQL各种结果。你甚至可以这样做:

SELECT u.profession FROM users u GROUP BY u.profession DESC

让你的职业按DESC顺序排序。

DISTINCT创建一个临时表并使用它来存储重复项。GROUP BY做同样的事情,但事后对不同的结果进行排序。

所以

SELECT DISTINCT u.profession FROM users u

如果您没有索引,则更快profession


查看完整回答
反对 回复 2019-08-09
?
紫衣仙女

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是这种方式的通用关键字。

因此,人们必须小心,不要将上述答案视为所有情况的正确答案......您可能会感到困惑并得到错误的结果,而您想要的只是优化!


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 855 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信