如果我有桌子

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

?

推荐答案

它们本质上是等价的(事实上,有些数据库就是这样在引擎盖下实现DISTINCT的).

如果其中一个更快,它将是DISTINCT.这是因为,尽管这两者是相同的,但查询优化器必须捕捉到这样一个事实:您的GROUP BY没有利用任何组成员,只是利用了他们的密钥.DISTINCT使这一点更加明确,因此您可以使用稍微愚蠢的优化器.

如果有疑问,请测试!

Mysql相关问答推荐

如何在SQLAchemy for MYSQL中将字面量转换为表达?

SQL: Select 并计算下一行的值

如何获得表中只有最大值行的一个列被另一个列分区?

无条件理解MySQL中内连接和交叉连接的相似性

含有子查询的MySQL函数出现语法错误

如何从MySQL数据库中提取入职第一个月的工作天数?

查找表中的唯一记录

如何清除mysql 8 innodb中的数据库缓存

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

如何查找列的所有值都相同的行?

如何将结果列中的不同值按其他列sql中的值带入单行

SQL从字典中的键获取值

如何使用同一个表在 2 个字段上左连接

用数字和字母对 VARCHAR 列进行排序

在 postgresql 中实现 UML 类:创建类型与创建表

Golang Gorm没有从关联表中检索数据

计算每个用户在第二个表中有多少条记录

MySQL 在每个唯一值第一次出现时 Select 行

从 MySQL JSON 数据类型中提取不带引号的值

cron 启动的 mysqldump 和密码安全