今天遇到一个mysql查询不走索引的情况,记录一下排查过程及解决办法
Mysql版本 5.6 5.7
错误情况
两表关联,两表数据量不超过10w,查询速度极慢,基本约等于查不出来.
测试:
表1 user表 数据量10w
表2 user_role表 数据量10w
查询语句
select * from user_role a left join user b on a.user_no = b.user_no
排查过程
查看执行过程

发现a表并没有走索引,全表扫描
而b表的Extra里的信息显示使用了BNL算法,效率很低(相较于索引) 感兴趣的可以搜一下Using join buffer (Block Nested Loop)
- 排查关联条件字段类型 一致
- 排查索引是否正确 没问题

本文记录了一个MySQL查询慢的问题,原因是两个表关联字段字符集不一致导致索引未被使用。通过调整字段字符集至一致,成功解决了查询效率问题。排查过程中尝试了修改SQL语句,包括使用等连接和调整表连接顺序,发现这些方法只能暂时解决问题,最终解决关键在于字段字符集的一致性。
5

被折叠的 条评论
为什么被折叠?



