若有收获,请记得分享和转发哦
我们用 explain 分析包含 group by 的 select 语句时,从输出结果的 Extra 列经常可以看到 Using temporary; Using filesort
。看到这个,我们就知道 MySQL 使用了临时表来实现 group by。
使用临时表实现 group by,成本高,执行慢。如果能够利用索引中记录已经排好序的特性,使用索引来实现 group by,那就是鸟枪换炮了。
本文我们一起来探寻 MySQL 使用索引实现 group by 的过程,使用临时表实现 group by 会单独用一篇文章来介绍。
本文内容基于 MySQL 5.7.35 源码。
内容目录
引言
紧凑索引扫描
松散索引扫描
两种索引扫描怎么选?
4.1 松散索引扫描成本更高怎么办?
4.2 为什么松散索引扫描会比紧凑索引扫描成本高?总结