加快加入表格

时间:2018-05-18 03:35:25

标签: mysql join

加入3个表时,我设法在加入前两个时获得结果:

SELECT so.id, so.title, so.cat, sr.img
FROM extended_details AS so
JOIN details AS sr ON so.id = sr.id
LIMIT 6

当我尝试加入第三个表时出现问题:

SELECT so.id, so.title, so.cat, sr.img
FROM extended_details AS so
JOIN details AS sr ON so.id = sr.id
JOIN scores AS se ON sr.id = se.id 
ORDER BY score_sec DESC
LIMIT 6

这似乎需要永远,我从来没有得到我的结果,每张表有大约300k的ID,我已经尝试了相关的子查询,但我担心这可能需要更长时间。

问题似乎是在运行

后的ORDER BY
SELECT so.id, so.title, so.cat, sr.img, se.score
        FROM extended_details AS so
        JOIN details AS sr ON so.id
        JOIN scores AS se ON se.id = sr.id
        LIMIT 6

没有问题。

1 个答案:

答案 0 :(得分:0)

鉴于问题中缺乏细节,没有关于主键,唯一或其他索引的信息......

我们怀疑缺少合适的索引导致执行计划非常低效。

建议:

  • 添加一些适当的索引。

  • 使用EXPLAIN查看查询的执行计划。

  • 如果没有合适的索引,ORDER BY col将需要"使用filesort" (据报道)大集合的操作。

  • 在整个结果集排序后,LIMIT子句几乎应用于最后一步。