2012-06-27 87 views
0

我一直在努力的一个程序使用复杂的MySQL查询来合并来自多个具有匹配项目ID的表的信息。但是,由于我添加了您在下面看到的子查询,因此查询从1秒以内执行到3秒以上。你有什么建议,我可以做什么来优化这个查询更快?我认为有一个复杂的查询比4或5个更小的查询更好吗?复杂的MySQL查询很慢

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 
+2

您是否有所需的桌子上的所有“索引”? – Stony

+1

作为一个较短的答案,不,是的 - 我没有具体的建议,但您认为一个复杂的查询总是比多个小型查询更好。 –

+0

请'解释' – CAFxX

回答

0

查询可以通过查看数据来查找匹配。子查询需要多次查看数据才能找到需要的项目。在这种情况下,您可能希望将其重写为多个查询。很多时候,多个简单的查询会更好 - 我认为这是其中的一种情况。

你也可以看看你的索引是否运作良好 - 如果你知道那是什么。之所以必须这样做:How does database indexing work?

对于一个具体的建议,你可以在不同的查询中找到每个AID的最后一张海报,然后简单地加入它。