mysql 关联查询 索引不起作用原因记录

今天联表查询的时候发现,两个表的’openid’都已经加了索引,联表的使用也是用的索引字段,理论上应该能命中索引,但是explain分析索引失效了,导致查询平均时间从0.01暴涨到平均十几秒

SELECT l.*,m.nickname,m.id AS member_id,m.mobile,m.avatar,m.realname,m.weixin,m1.nickname AS m1_nickname,m1.id AS m1_id,m1.mobile AS m1_mobile,m1.avatar AS m1_avatar,m1.realname AS m1_realname,m2.nickname AS m2_nickname,m2.id AS m2_id,m2.mobile AS m2_mobile,m2.avatar AS m2_avatar,m2.realname AS m2_realname,ml.logno,ml.createtime AS rechargetime,ml.rechargetype FROM `ims_vcshop_reward` l LEFT JOIN `ims_vcshop_member` m ON l.openid=m.openid LEFT JOIN `ims_vcshop_member` m1 ON l.m1=m1.id LEFT JOIN `ims_vcshop_member` m2 ON l.m2=m2.id LEFT JOIN `ims_vcshop_member_log` ml on ml.id=l.logid WHERE l.uniacid=2  ORDER BY l.id DESC limit 0,50

修改后命中索引

最后通过百度大法发现
1、两表关联使用的条件字段中字段的长度是否是一致的(本人测试不影响,规范期间数据库相同字段还是要保持长度一致)

2、两表关联使用的条件字段中字段的编码是否是一致的

如果以上两种情况不满足,也会导致索引失效;
本人在此就是’openid’字段,分别使用了utf8和utf8mb4两种编码,导致索引失效;