7

我有一个包含用户评论的表,我想检索每个用户发表的最后评论。

下面的查询应该让你知道我想要做什么

select comment, comment_id, userId FROM comments_table 
WHERE comment_id in (
   SELECT MAX(comment_id)
   FROM comments_table where userId in (2001, 2002, 2010)
   GROUP BY userId
)

上面的查询有效,但需要很长时间,尤其是在用户 ID 很多的情况下。

我需要一个更快的查询语句来完成同样的事情。

4

3 回答 3

9

使用连接而不是子查询:

SELECT
    b.*
FROM
    (
        SELECT userid, MAX(comment_id) AS maxcomment
        FROM comments_table
        WHERE userid IN (2001, 2002, 2010)
        GROUP BY userid
    ) a
INNER JOIN
    comments_table b ON 
        a.userid = b.userid AND
        a.maxcomment = b.comment_id

此查询中的子选择只会执行一次,而WHERE IN子查询将针对评论表中的每一行执行。

于 2012-07-05T04:00:33.320 回答
0

尝试

         select comment, comment_id, userId FROM          comments_table WHERE userId in (2001, 2002, 2010) order by comment_id desc limit 1

试试看这个查询是否与你的查询等效userid列上有一个索引,这应该比体面

于 2012-07-05T04:00:44.177 回答
0

让我们保持简单:

SELECT comment, MAX(comment_id), userId 
FROM comments_table 
WHERE userId IN (2001, 2002, 2010) 
GROUP BY userId;
于 2012-07-05T04:04:26.357 回答