MySQL实战:group by 语句怎么优化?

请添加图片描述

CREATE TABLE `staff` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(64) NOT NULL COMMENT '姓名',
  `age` int(4) NOT NULL COMMENT '年龄',
  `city` varchar(64) NOT NULL COMMENT '城市',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='员工表';
explain select city ,count(*) as num from staff group by city;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

group by 优化

order by null 不排序

explain select city ,count(*) as num from staff group by city order by null

在这里插入图片描述
只有Using temporary 没有 Using filesort,说明没有进行排序

分组字段加索引

alter table staff add index idx_city(city)
explain select city ,count(*) as num from staff group by city

在这里插入图片描述
Using index,表明索引覆盖,type为inde,表明遍历了索引idx_city

Using temporary 和 Using filesort 全都没有了

DROP INDEX idx_city ON staff

尽量使用内存临时表


使用SQL_BIG_RESULT

explain select SQL_BIG_RESULT city ,count(*) as num from staff group by city

在这里插入图片描述

参考博客

[1]https://mp.weixin.qq.com/s/EybebcYX4i13r5nDRG14fg
[2]https://juejin.cn/post/7053966777088213005

猜你喜欢

转载自blog.csdn.net/zzti_erlie/article/details/123711649