mysql中 两个表left join ,order by 字段为非主表字段,导致很慢 如果换成主表的索引字段就很快
示例:
select a.c1 ,a.c2........ from tab_a a left join tab_b b on a.u_id = b.id where ................... order by b.c5 desc limit 10
其中 order by b.c5 c5字段为索引字段,但是explain后显示 主表没走索引 即使where 后加了索引条件字段 ,也是ALL
请问如何优化
SELECT a.c1, a.c2, ...
FROM tab_a a
LEFT JOIN (
SELECT id, c5
FROM tab_b
WHERE ...
ORDER BY c5 DESC
LIMIT 10
) b ON a.u_id = b.id
WHERE ...
ORDER BY b.c5 DESC
LIMIT 10;
查看Explain执行计划是我们开发人员必须掌握的一个技能,下一篇我会整理Explain执行计划的详细查看方法。
本篇文章是查看索引使用情况,我们通过key
列、Extra
列判断足矣。key
列即展示使用到的索引,下面重点看一下当使用到索引
即key列
有值时,Extra列展示的相关信息都代表啥。