0

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

2 回答 2

0

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

您还可以查看您的索引是否运行良好 - 如果您知道那是什么。原因与此有关:数据库索引如何工作?.

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

于 2012-06-27T15:40:53.553 回答
0

它始终取决于您拥有的数据以及您使用它的方式。

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

于 2012-06-27T15:44:40.793 回答