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云平台推荐
随便看看
- 2022-12-14Windows游戏服务器缺少.NET3.5环境依赖而诱发的时间戳转换问题
- 2024-09-18Windows DOS格式脚本和Linux Unix格式脚本差异导致的跨平台问题
- 2021-08-26MongoDB高频命令集合
- 2021-08-03Elastic stack日志分析集群部署
- 2022-08-16MySQL utf8mb4字符集之表情包存储/生僻词存储