记一次mysql联表查询性能优化案例
问题描述
今天项目中遇到一个问题,就是后端同事发现一个联表查询并更新的语句执行起来,总是锁表,导致程序完全无法正常执行。由于真是sql语句比较复杂,有很多层的嵌套。我将问题sql简化为下面的形式:
SELECT * FROM A t1 LEFT JOIN B t2 ON t1.c_id = t2.c_id
其中A和B可以代表一张表,或者一个查询结果,经过我调试,发现这部分sql会耗费24秒的时间。
问题原因
联表的两张表没有加索引,导致联表查询效率很低,再加上外层的嵌套,导致sql执行时间过长,导致锁表。
解决方法
1、给两张表,联表的字段都加上索引(给t1.c_id、t2.c_id加上索引)
2、如果有条件字段,也给查询条件字段加上索引
本次优化直接将24秒的查询,优化到了毫秒级。
共有 0 条评论