加速连接表

qnyhuwrf  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(308)

在连接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,我尝试过相关子查询,但我担心这可能需要更长的时间。
自从运行以来,问题似乎已经解决了

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

没有问题。

oxiaedzo

oxiaedzo1#

由于问题缺乏细节,没有关于主键、唯一索引或其他索引的信息。。。
我们怀疑缺乏合适的索引会导致执行计划非常低效。
建议:
添加一些适当的索引。
使用 EXPLAIN 查看查询的执行计划。
如果没有合适的索引 ORDER BY col 需要对一个(据说)大的集合执行“using filesort”操作。
limit子句几乎是在对整个resultset排序之后的最后一步应用的。

相关问题