MySQL5.7执行count(*)比MySQL5.6执行更慢
最近遇到一个比较有意思的问题,用户MySQL5.6升级MySQL5.7后,出现MySQL5.7执行count(*)统计类SQL,比MySQL5.6慢很多,并且可以100%复现。初始我们怀疑和Cardinality(基数)采样有关。(详情参考文章:MySQL优化器之Cardinality(Analyze table))但是经过验证发现Cardinality采样指标并无不妥之处。
所以我们就在google一顿检索,直至我们发现了MySQL官网的这个BUG描述:
https://bugs.mysql.com/bug.php?id=80580
根据官网介绍,count(*) much slower on 5.7 than 5.6,影响MySQL5.7小版本序列为:5.7.2、5.7.10、5.7.11。目前修复于5.7.18和MySQL8.0.1。具体异常原因是:SELECT COUNT(*) 在某些情况下,由于 MySQL5.7.2中引入的修改导致InnoDB计算行数时通过遍历聚集索引而不是代价更小的二级索引,所以性能会更差。5.7.18修复后,COUNT(*)操作可以正常走二级索引,性能得以大大提升。
作者:UStarGao
链接:https://www.starcto.com/mysql/268.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-03-25UCloud MySQL与自建MySQL搭建主从同步
- 2021-09-13开源论坛homeland容器化部署
- 2021-01-26Linux逻辑卷/分区扩容
- 2021-02-27Visual Studio Code上传文件到GitHub
- 2023-03-12Linux pstree命令树状图方式查看进程