2

このMySQLの質問があります。正常に動作しますが、非常に低速です。実行には最大30秒かかります。

SELECT t.Id, Subject, k.info
FROM tip t
LEFT JOIN comments k ON t.Id = k.Tipid
WHERE event = 1
AND k.Id
IN (
SELECT Max(Id) FROM comments GROUP BY Tipid
)

サブクエリ(SELECT Max(Id) FROM comments GROUP BY Tipid)のみを実行すると、実行に約0.02秒かかります。

サブクエリに問題があります。あなたはなにか考えはありますか?

4

3 に答える 3

2

max(id)を選択した場合、groupbyは必要ありません。これを試してください

    SELECT t.Id, Subject, k.info
    FROM tip t
    LEFT JOIN comments k ON t.Id = k.Tipid
    WHERE event = 1
    AND k.Id in (select Max(Id) from comments)
于 2013-02-13T09:58:57.573 に答える
1

代わりにこれを試してください:

SELECT t.Id, t.Subject, c.info
FROM tip t
LEFT JOIN
(
   SELECT Tipid, MAX(Id) AS MaxId
   FROM comments 
   GROUP BY Tipid
) AS c  ON t.Id = c.Tipid
       AND t.Id = c.MaxId
WHERE t.event = 1;
于 2013-02-13T09:52:08.497 に答える
0

これには多くの理由があります...私はあなたがこれを試してみると思います...

SELECT t.Id, Subject, k.info
FROM tip t
INNER JOIN comments k ON t.Id = k.Tipid
WHERE event = 1
  AND k.Id IN ( SELECT Max(Id) FROM comments GROUP BY Tipid )

50レコードを超えるとLEFTJOINが遅くなりすぎるためです。

于 2013-02-13T13:25:30.717 に答える