MySQL-mysql 在什么情况下group by效率最高

小组聊天灌水 小组聊天灌水 主题:993 回复:2175

MySQL-mysql 在什么情况下group by效率最高

甜柠檬 发布于 2017-08-03 字数 332 浏览 1141 回复 4

下面是一个简单用户信息表:

CREATE TABLE tb_users (
uid int(11) unsigned NOT NULL auto_increment,
username varchar(200) NOT NULL,
education varchar(200) NOT NULL,
profession varchar(200) NOT NULL,
employer varchar(200) NOT NULL,
PRIMARY KEY (uid)
)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

晚风撩人 2017-10-18 4 楼

distinct 和 group by 的 所有的原理是一样的 都有三种情况

1 、使用松散的索引扫描实现
2 、使用紧凑的索引扫描实现
3 、 使用临时表索引扫描实现

效率 从上到下依次递减

唯一有一个不同点, 就是 group by 要多 进行一个 排序 , 但是 使用索引的情况下关键字已经是排序好的 , 所以 1,2 条件应该没有区别 。 但是如果使用 第三种临时表的情况来排序, 那效率肯定就有不同了

具体你可以看看《性能调优与架构设计--第八章mysql 数据Query 的优化--- 简朝阳著》 说的很详细

甜柠檬 2017-10-08 3 楼

让group by 使用索引而不创建临时表,
使用索引的前提条件是:所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字(B-树索引,不是HASH索引)
至于DISTINCT 和GROUP BY哪个效率更高?
理论上 DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作还要为其他聚集函数进行准备工作。从这一点上将,GROUP BY操作做的工作应该比DISTINCT所做的工作要多一些。
但是实际上,DISTINCT操作,它会读取了所有记录;GROUP BY需要读取的记录数量与分组的组数量一样多,比实际存在的记录数目要少很多。

偏爱自由 2017-09-18 2 楼

一直认为DISTINCT比较快。。。。。。

浮生未歇 2017-08-20 1 楼

education字段有索引的话,那么两个语句区别不大。
education字段没有索引

如果对查询结果进行排序的话推荐用GROUP BY ;
不排序结果的话DISTINCT应该会快一些。