MySQL 怎么用索引实现 group by?

0311dd02a9149c7fd68124f19f218dae.png

若有收获,请记得分享和转发哦

我们用 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 源码。

内容目录

  1. 引言

  2. 紧凑索引扫描

  3. 松散索引扫描

  4. 两种索引扫描怎么选?
    4.1 松散索引扫描成本更高怎么办?
    4.2 为什么松散索引扫描会比紧凑索引扫描成本高?

  5. 总结

4d10d0c370dfd74f23465ad59eba2dbe.png

f437f2177ccd90e093adc9841651dcc5.png

3ba8e3c28265ad2f5cf8f62c8a1a48a4.png

3c697455b12fb28ed85d0f9a1811e3f2.png

a1634fbeed90d080176edad18c39a178.png

3513d628cb76f8bfe15e31d4e9b4f387.png

3e1af476625368ba72d0c781a6034380.png

f5259220ea4fd0ed3bc9ff158641b493.png

7e0022cb17b3b4b089b5d42349ec17a2.png

781f029ce4f74481fb7d20f68bfcff31.png

d3d2bc41abeddacce16ba911dbbd1965.png

621a2bb8ed91c14cf43e8ba2b0cf3efd.png

2f51309532a4b246bf2c6e7acdf9efc8.png

0f58f2a1d702be4d2d8c34327835b18e.png

333cdd76e88559c912186474e6e429ee.png

79cfd3fac4a59dd875734d24654486a8.png

64557dea206b2547455e880fa6b6ffe5.png

993277d53f5a19abe35d5ef558edbea3.png

718f33296cc751e276c6b1933326efae.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值