DISTINCT and GROUP BY

今天突然想到理论上 DISTINCT 逻辑上可以用 GROUP BY 来替代。

比如下面两个查询。

SELECT DISTINCT type FROM question;
type
choice
single_choice
uncertain_choice
determine
fill
essay
material
SELECT type FROM questiton GROUP BY type;
type
choice
single_choice
uncertain_choice
determine
fill
essay
material

结果完全是一样的。

具体 explain 一下,整个执行计划是一样的。 DISTINCT 直接用索引做了 GROUP BY

EXPLAIN SELECT DISTINCT type FROM question;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE question range type type 1 NULL 16 Using index for group-by
EXPLAIN SELECT type FROM question GROUP BY type;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE question range type type 1 NULL 16 Using index for group-by

是不是所有的 DISTINCT 的执行计划都看这样呢?换一个属性看看。

EXPLAIN SELECT DISTINCT score FROM question;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE question ALL NULL NULL NULL NULL 37424 Using temporary
EXPLAIN SELECT score FROM question GROUP BY score;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE question ALL NULL NULL NULL NULL 37424 Using temporary; Using filesort

中间有微妙的差别。两个查询都用了 temporary. 说明 MySQL 全表扫描再做去重。 GROUP BY 去重用的是排序。 DISTINCT 仅这里看不出来。具体会有什么差别? 直接查询看一下。

SELECT DISTINCT score FROM question;
score
1.0
2.0
0.0
3.0
8.0
12.0
6.0
4.0
10.0
14.0
18.0
2.5
15.0
2.3
5.0
1.5
4.5
SELECT score FROM question GROUP BY score;
score
0.0
1.0
1.5
2.0
2.3
2.5
3.0
4.0
4.5
5.0
6.0
8.0
10.0
12.0
14.0
15.0
18.0

可以看出 GROUP BY 是用排序去重, DISTINCT 不是。

MySQL 的优化策略还是相当复杂的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 12,334评论 5 116
  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 8,310评论 0 33
  • Mysql概述 数据库是一个易于访问和修改的信息集合。它允许使用事务来确保数据的安全性和一致性,并能快速处理百万条...
    彦帧阅读 14,645评论 10 460
  • MySQL逻辑架构 下面是一幅MySQL各组件之间如何协同工作的架构图,有助于我们深入理解MySQL服务器。 如图...
    骑小猪看流星阅读 10,227评论 2 135
  • 星期日上午是妈妈的生日,我们没有礼物送给他,因为我们问了她很多次她都没有说她想要什么礼物。 ...
    博涵2008阅读 2,047评论 0 0