猿问

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

什么更快,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


皈依舞
浏览 856回答 3
3回答

ITMISS

它们本质上是相互对应的(实际上这是一些数据库DISTINCT在引擎盖下实现的方式)。如果其中一个更快,那就是DISTINCT。这是因为,虽然两者是相同的,但查询优化器必须抓住这样一个事实:你GROUP BY没有利用任何组成员,只有他们的密钥。DISTINCT使这个显而易见,所以你可以使用稍微笨拙的优化器。如有疑问,请测试!

侃侃无极

如果您有索引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。

紫衣仙女

上面的所有答案都是正确的,对于单列上的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是这种方式的通用关键字。因此,人们必须小心,不要将上述答案视为所有情况的正确答案......您可能会感到困惑并得到错误的结果,而您想要的只是优化!
随时随地看视频慕课网APP

相关分类

MySQL
我要回答