mysql explain 正常,但是实际上是全盘扫描

问题描述,由于最近快要到考试季节了,用户活跃量大幅度增加,虽然已升级rds数据库的配置;但是发现了另一个问题,iops大约在3%左右,而cpu缺在 30%以上;虽然都处于运行良好的状态;但是这个参数告诉我数据库服务器运行的不正常;

于是发起sql诊断;查看是否有慢sql如图所示:

这里面有一条语句,从数据上分析肯定是全盘扫描 没有用到索引 ,可是明明有索引 为什么没有用到索引呢

下面我们使用 explain 来查看一下,发现mysql预估的查询量 大约在2000左右,这个数据量对于一个数据库来说简直就是毫秒级别的查询;不可能造成全盘扫描查询的;

就在这一点,我忽略了mysql的一个重要的信息;mysql预估和实际查询还是有区别的;mysql 并没有使用我新建的 联合索引,而是使用的 主键查询,我的where条件里面没有使用主键;

既然问题已找到,那么接下来优化一下sql即可 这里使用一个重要的强制索引 force INDEX;如图所示:key,ref都已使用索引

总结:优化sql之后,刷新 sql服务器 会发现 ,cpu已经降到 5% 以下了;这才是正常的情况;至此结束。

原文地址:https://www.cnblogs.com/ailingfei/p/6760459.html