线上有个查询sql,原来是没有join查询没有问题,后来应业务要求改成left join之后, 查询时间就暴涨了 需要长达17s

通过explain分析,发现订单表没有走索引:
分析结果显示有两个表type都是All
2021-03-22 13-47-38 的屏幕截图.png

于是猜测事索引没有加上,给所有where条件和left join on用到的字段都加上索引
再测,发现b表还是为All,讲道理,这个时候索引应该出发了才对,这时候我尝试给这个b.sub_acc_no这个表字段加到where条件里,发现执行变快了,但是explain发现type仍然为All,我都指定sub_acc_no的值了,type讲道理应该是ref了至少,这个时候基本能断定是所以失效了,开始查两个表字段差异,发现编码不一致,修改为一致后再explain:
2021-03-22 13-59-52 的屏幕截图.png
结论,如果两张表的编码和字段编码不一致,会导致索引失效

标签: none

添加新评论