MySql中怎样用group by
发布时间:2022-06-16 14:43 所属栏目:115 来源:互联网
导读:日常开发中,我们经常会使用到group by。亲爱的小伙伴,你是否知道group by的工作原理呢?group by和having有什么区别呢?group by的优化思路是怎样的呢?使用group by有哪些需要注意的问题呢?本文将跟大家一起来学习,攻克group by~ 1. 使用group by的简单
日常开发中,我们经常会使用到group by。亲爱的小伙伴,你是否知道group by的工作原理呢?group by和having有什么区别呢?group by的优化思路是怎样的呢?使用group by有哪些需要注意的问题呢?本文将跟大家一起来学习,攻克group by~ 1. 使用group by的简单例子 group by一般用于分组统计,它表达的逻辑就是根据一定的规则,进行分组。我们先从一个简单的例子,一起复习一下哈。 假设用一张员工表,表结构如下: CREATE TABLE `staff` ( `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', `id_card` varchar(20) NOT NULL COMMENT '身份证号码', `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='员工表'; 2. group by 原理分析 2.1 explain 分析 我们先用explain查看一下执行计划 explain select city ,count(*) as num from staff group by city; MySql中如何用group by Extra 这个字段的Using temporary表示在执行分组的时候使用了临时表 Extra 这个字段的Using filesort表示使用了排序 group by 怎么就使用到临时表和排序了呢?我们来看下这个SQL的执行流程 2.2 group by 的简单执行流程 explain select city ,count(*) as num from staff group by city; 我们一起来看下这个SQL的执行流程哈 创建内存临时表,表里有两个字段city和num; 全表扫描staff的记录,依次取出city = 'X'的记录。 判断临时表中是否有为 city='X'的行,没有就插入一个记录 (X,1); 如果临时表中有city='X'的行的行,就将x 这一行的num值加 1; 遍历完成后,再根据字段city做排序,得到结果集返回给客户端。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读