如果我有一张桌子

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

?


当前回答

这不是规则

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

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

其他回答

经过大量的测试,我们得出的结论是GROUP BY更快

选择sql_no_cache opnamegroep_intern 从telwerken WHERE opnemergroep IN (7,8,9,10,11,12,13) group by opnamegroep_intern

总共0.0944秒 显示记录0 - 29(共635条,查询持续0.0484秒)

选择sql_no_cache 不同的(opnamegroep_intern) 从telwerken WHERE opnemergroep IN (7,8,9,10,11,12,13)

635总共0.2117秒(几乎慢了100%) 韦格弗面包车记录0 - 29(总共635,查询时间0.3468秒)

在postgres的某些情况下,distinct可能比group by慢(不知道其他dbs)。

测试的例子:

postgres=# select count(*) from (select distinct i from g) a;

count 

10001
(1 row)

Time: 1563,109 ms

postgres=# select count(*) from (select i from g group by i) a;

count
10001
(1 row)

Time: 594,481 ms

http://www.pgsql.cz/index.php/PostgreSQL_SQL_Tricks_I

所以要小心……:)

似乎这些查询并不完全相同。至少对MySQL是这样。

比较:

描述从northwind.products中选择不同的产品名称 描述从北风选择的产品名称。产品组按产品名称

第二个查询在Extra中额外给出了“Using filesort”。

如果你不需要执行任何组函数(如果你想将数值数据添加到表中,可以使用sum, average等),请使用SELECT DISTINCT。我怀疑它更快,但我没有任何表现。

在任何情况下,如果您担心速度,可以在列上创建索引。

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