mysql order by 查询慢

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;
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7683356
  • 这篇博客你也可以参考下:mysql中使用order by排序后乱序问题
  • 除此之外, 这篇博客: MySQL的order by该如何避免“未命中索引“中的 二、Explain查看索引使用情况 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   查看Explain执行计划是我们开发人员必须掌握的一个技能,下一篇我会整理Explain执行计划的详细查看方法。

      本篇文章是查看索引使用情况,我们通过key列、Extra列判断足矣。key列即展示使用到的索引,下面重点看一下当使用到索引key列有值时,Extra列展示的相关信息都代表啥。