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
)

上記のクエリは機能しますが、特にuserIdが多い場合は時間がかかりすぎます。

同じことを達成するより迅速なクエリステートメントが必要です。

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、コメント テーブルの各行に対して実行されるサブクエリとは対照的に、1 回だけ実行されます。

于 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 に答える