我一直在研究的程序使用复杂的MySQL查询来组合来自具有匹配项ID的几个表的信息。但是,由于我添加了您在下面看到的子查询,因此查询从执行时间不到1秒到超过3秒。您对我可能采取的措施有什么建议来优化此查询更快吗?我认为有一个复杂的查询比有4个或5个较小的查询要好吗?
SELECT uninet_articles.*,
Unix_timestamp(uninet_articles.gmt),
uninet_comments.commentcount,
uninet_comments.lastposter,
Unix_timestamp(uninet_comments.maxgmt)
FROM uninet_articles
RIGHT JOIN (SELECT aid,
(SELECT poster
FROM uninet_comments AS a
WHERE b.aid = a.aid
ORDER BY gmt DESC
LIMIT 1) AS lastposter,
Count(*) AS commentcount,
Max(gmt) AS maxgmt
FROM uninet_comments AS b
GROUP BY aid
ORDER BY maxgmt DESC
LIMIT 10) AS uninet_comments
ON uninet_articles.aid = uninet_comments.aid
LIMIT 10
答案 0 :(得分:0)
查询可以通过数据查找匹配项。子查询需要多次遍历数据才能找到所需的项目。在这种情况下,您可能希望将其重写为多个查询。很多时候,多个更简单的查询会更好 - 我认为这是其中一种情况。
您还可以查看您的索引是否运行良好 - 如果您知道这是什么。之所以如此:How does database indexing work?。
对于特定的建议,您可以在不同的查询中找到每个AID的最后一张海报,然后再加入。
答案 1 :(得分:0)
它总是取决于您拥有的数据和使用方式。
您应该在您的选择上使用说明,以查看您是否使用索引。 http://dev.mysql.com/doc/refman/5.5/en/explain.html