复杂的MySQL查询很慢

时间:2012-06-27 15:36:59

标签: mysql performance subquery

我一直在研究的程序使用复杂的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 

2 个答案:

答案 0 :(得分:0)

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

您还可以查看您的索引是否运行良好 - 如果您知道这是什么。之所以如此:How does database indexing work?

对于特定的建议,您可以在不同的查询中找到每个AID的最后一张海报,然后再加入。

答案 1 :(得分:0)

它总是取决于您拥有的数据和使用方式。

您应该在您的选择上使用说明,以查看您是否使用索引。 http://dev.mysql.com/doc/refman/5.5/en/explain.html