在连接 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
没有问题。
最佳答案
鉴于问题缺乏详细信息,没有有关主键、唯一索引或其他索引的信息...
我们怀疑缺乏合适的索引导致执行计划效率非常低。
<小时/>建议:
添加一些适当的索引。
使用
EXPLAIN
查看查询的执行计划。如果没有合适的索引,
ORDER BY col
将需要对(据报道)大型集合执行“使用文件排序”操作。在整个结果集排序之后,LIMIT 子句几乎作为最后一步应用。
关于mysql - 加速连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403404/