Sql笔记

123 阅读1分钟

group by

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

  1. 创建内存临时表,表里有两个字段citynum
  2. 全表扫描staff的记录,依次取出city = 'X'的记录。
  • 判断临时表中是否有为 city='X'的行,没有就插入一个记录 (X,1);
  • 如果临时表中有city='X'的行,num值加 1;
  1. 遍历完成后,再根据字段city排序,得到结果集返回给客户端。

image.png

就是把需要排序的字段,放到sort buffer,排完就返回。在这里注意一点哈,排序分全字段排序rowid排序

  • 如果是全字段排序,需要查询返回的字段,都放入sort buffer,根据排序字段排完,直接返回
  • 如果是rowid排序,只是需要排序的字段放入sort buffer,然后多一次回表操作,再返回。
  • 怎么确定走的是全字段排序还是rowid 排序排序呢?由一个数据库参数控制的,max_length_for_sort_dat

\摘抄来自 作者:捡田螺的小男孩
链接:juejin.cn/post/705396… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。