码迷,mamicode.com
首页 > 其他好文 > 详细

Group by 和distinct对比

时间:2018-11-06 19:24:53      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:9.png   通过   聚合   统计   ec2   ima   code   order by   profile   

** Group by 和distinct对比**

CREATE TABLE sbtest1 (
id int(11) NOT NULL AUTO_INCREMENT,
k int(11) NOT NULL DEFAULT ‘0‘,
c char(120) NOT NULL DEFAULT ‘‘,
pad char(60) NOT NULL DEFAULT ‘‘,
PRIMARY KEY (id),
KEY k_1 (k)
) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8;
1000w数据量

1、  对于主键

Group by的执行计划
技术分享图片
Distinct的执行计划
技术分享图片
可以看到group by使用了主键,而distinct使用了辅助索引k_1
这说明了distinct可能是一种统计操作,也就是Innodb在有辅助索引时候,统计会走辅助索引,如下图,进行count(*)也是走的k_1辅助索引。
技术分享图片

2、  对于辅助索引

Group by的执行计划
技术分享图片
Distinct的执行计划
技术分享图片
通过以上对比,可以看出来他们是等价的,执行计划一致。

3、  对于普通字段

Group by的执行计划,这里做了一个order by null的处理,就是不排序
技术分享图片
Distinct的执行计划,按理说,如果distinct要是统计的话为啥没有走k_1
技术分享图片
通过以上对比,可以看出来也是等价的,执行计划一致。

4、  Group by 需要聚合,而distinct不需要聚合

5、  Group by 比 distinct效率高,distinct需要读取所有记录,而group by只需要读取分组的

数量的记录。
set profiling=1;
select distinct(k) from sbtest1
select k from sbtest1 group by k
再通过show profiles查看
技术分享图片
Group by比distinct快了0.05秒多

Group by 和distinct对比

标签:9.png   通过   聚合   统计   ec2   ima   code   order by   profile   

原文地址:http://blog.51cto.com/8370646/2313603

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!