栏目头部广告

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

image.png

根据官网介绍,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(*)操作可以正常走二级索引,性能得以大大提升。

image.png

作者:UStarGao
链接:https://www.starcto.com/mysql/268.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`