group by
explain select city ,count(*) as num from staff group by city;
- 创建内存临时表,表里有两个字段
city和num; - 全表扫描
staff的记录,依次取出city = 'X'的记录。
- 判断临时表中是否有为 city='X'的行,没有就插入一个记录 (X,1);
- 如果临时表中有city='X'的行,num值加 1;
- 遍历完成后,再根据字段
city做排序,得到结果集返回给客户端。
就是把需要排序的字段,放到sort buffer,排完就返回。在这里注意一点哈,排序分全字段排序和rowid排序
- 如果是
全字段排序,需要查询返回的字段,都放入sort buffer,根据排序字段排完,直接返回 - 如果是
rowid排序,只是需要排序的字段放入sort buffer,然后多一次回表操作,再返回。 - 怎么确定走的是全字段排序还是rowid 排序排序呢?由一个数据库参数控制的,
max_length_for_sort_dat
\摘抄来自
作者:捡田螺的小男孩
链接:juejin.cn/post/705396…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。