mysql字符集导致left join出现Using join buffer (Block Nested Loop)
后台管理分页查询时,发现请求接口超时
问题追踪
查看日志,发现日志中打印的分页查询的数据,发现异常,查看响应时间41秒,一个分页查询请求41秒大概率是因为慢SQL,接着我们分析sql发现查询确实很慢
问题分析
确认了是SQL的原因,通过explain分析,发现left join关联的表竟然全是全表扫描,此时我们确认表中是否有关联字段索引,发现索引也有,那为什么有索引却不走索引呢,查看explain中 extra 列,发现一个从未见过的信息 **Using where; Using join buffer (Block Nested Loop) **,官方文档解释如下,使用连接缓冲区(块嵌套循环),相当于我们代码中的两层for循环,随着数据量的增加查询效率也会成倍增加。
大约 3 分钟