MySQL的count查询超级慢

sql执行情况
看到平均执行时间13.773s,意识到自己的认知漏洞了,一直认为有个记录总数的地方,直接返回这个数就好了

原因

主键是聚集索引,所以不选择主键,会选择你的索引里面长度最短的那个,如果你主键加了索引,那是非聚集索引,因为索引长度最短,所以会选择主键索引

加索引前,key_len为82
在这里插入图片描述
加索引后,key_len为4在这里插入图片描述

解决办法

给主键加上唯一索引

ALTER TABLEADD INDEX `u_idx_id` (`id`) USING BTREE;

加索引后执行时间为4s左右

问题

1、为什么key的长度会显著影响遍历速度?
前后两个查询计划中最显著的区别就是 key_len,一个长度为4字节,一个为82字节,这导致了count查询速度的巨大差异。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐