1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

MySQL5.7执行count(*)比MySQL5.6执行更慢

您好,我是本际云服务器推荐网的小编小本本。最近我们遇到了一个非常有意思的问题,用户将MySQL5.6升级到MySQL5.7之后,执行count(*)统计类SQL语句会变得非常缓慢,这个问题可以被100%的复现。

MySQL5.7执行count(*)比MySQL5.6执行更慢

怀疑Cardinality(基数)采样

一开始,我们怀疑这个问题和Cardinality(基数)采样有关,具体的信息可以参考这篇文章:MySQL优化器之Cardinality(Analyze table)。但是经过验证,我们发现这个假设是不正确的,Cardinality采样指标没有出现任何问题。

在官网找到了答案

于是,我们翻遍了谷歌,最终在MySQL官网的BUG描述页面上找到了答案:https://bugs.mysql.com/bug.php?id=80580

根据官网的介绍,count(*)在MySQL5.7的性能会比MySQL5.6慢很多。这个BUG影响的MySQL5.7的小版本序列有:5.7.2、5.7.10和5.7.11。而这个问题的修复是在5.7.18版本和MySQL8.0.1版本中实现的。

具体来说,异常的原因是,SELECT COUNT(*)在某些情况下,由于MySQL5.7.2中引入的修改导致InnoDB计算行数时通过遍历聚集索引而不是代价更小的二级索引,所以性能会更差。修复后,COUNT(*)操作可以正常走二级索引,性能得以大大提升。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7318.html