如果我有一张桌子

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)
)

我想获得所有专业领域的独特价值,什么会更快(或建议):

SELECT DISTINCT u.profession FROM users u

or

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

?


当前回答

如果可以,尽量选择最简单、最简短的答案——DISTINCT似乎更符合你的要求,因为它会给你你需要的答案,而且只有这个答案!

其他回答

这不是规则

对于每个查询....试着分开,然后按…分组比较完成每个查询的时间,并使用更快的....

在我的项目中,有时我使用group by和other distinct

它们本质上是等价的(事实上,这就是一些数据库在底层实现DISTINCT的方式)。

如果其中一个更快,它就是DISTINCT。这是因为,尽管两者是相同的,但查询优化器必须捕获这样一个事实,即GROUP BY没有利用任何组成员,只利用了它们的键。DISTINCT将此显式化,因此可以使用稍微笨一点的优化器。

有疑问的时候,测试一下!

对于单个列上的DISTINCT和单个列上的GROUP BY,上面的所有答案都是正确的。 每个db引擎都有自己的实现和优化,如果你只关心一点点差异(在大多数情况下),那么你必须针对特定的服务器和特定的版本进行测试!由于实现可能会改变…

但是,如果在查询中选择多个列,则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是这种方式的通用关键字。

所以朋友们,你们要小心,不要把上面的答案当成所有情况下的正确答案……你可能会感到困惑,得到错误的结果,而你想要的只是优化!

Group by比Distinct代价更大,因为Group by对结果进行排序,而Distinct则避免排序。但如果你想让group by产生与distinct相同的结果,请给order by null ..

SELECT DISTINCT u.profession FROM users u

等于

SELECT u.profession FROM users u GROUP BY u.profession order by null

如果可以,尽量选择最简单、最简短的答案——DISTINCT似乎更符合你的要求,因为它会给你你需要的答案,而且只有这个答案!