我有一个包含用户评论的表格,我想检索每个用户的最后评论。
下面的查询应该让我知道我想要做什么
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
)
以上查询有效,但需要的时间太长,特别是如果有很多userIds。
我需要一个更快的查询语句来完成同样的事情。
答案 0 :(得分: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
子查询。
答案 1 :(得分:0)
尝试
select comment, comment_id, userId FROM comments_table WHERE userId in (2001, 2002, 2010) order by comment_id desc limit 1
尝试查看此查询是否与您的查询等效
使用userid
列上的索引,这应该执行的不仅仅是正确的
答案 2 :(得分:0)
让我们保持简单:
SELECT comment, MAX(comment_id), userId
FROM comments_table
WHERE userId IN (2001, 2002, 2010)
GROUP BY userId;