1

vBulletin システムで実行されているクエリがあります。これは、最初の添付ファイル ID と共に、画像が添付されている最新のスレッドをフェッチします。

クエリは次のとおりです。

SELECT  thread.threadid, 
          thread.title, 
          thread.postuserid, 
          thread.postusername,
          thread.dateline, 
          thread.replycount, 
          post.pagetext,
          (
            SELECT attachment.attachmentid
            FROM `vb_attachment` AS attachment
                LEFT JOIN `vb_filedata` AS data 
                    ON data.filedataid=attachment.filedataid
            WHERE attachment.contentid=thread.firstpostid
                AND attachment.contenttypeid=1
                AND data.extension IN('jpg','gif','png')
                AND data.thumbnail_filesize>0
            ORDER BY attachmentid ASC
            LIMIT 1
          ) AS firstattachmentid
FROM `vb_thread` AS thread
   LEFT JOIN `vb_post` AS post 
        ON post.postid=thread.firstpostid
WHERE thread.forumid IN(331, 318)
        HAVING firstattachmentid>0
ORDER BY thread.dateline DESC
LIMIT 0, 5

ここで見ることができるクエリの説明結果:

ここに画像の説明を入力

問題: 通常、クエリは 0.00001 秒で実行されるため、クエリ全体が最適化されているため、ほぼ瞬時に実行されますが、新しいスレッドを作成した後 (スレッドがフォーラム ID 331、318 からのものでなくても)、40 秒以上かかります (から直接実行されます)。 MySQL GUI) であり、クエリの説明でさえ 2 秒以上かかります! . Explain クエリの処理が遅いと、インデックスの使用に関して同じ結果が表示されます。

同じクエリを 2 ~ 3 回実行すると、通常の速度に戻ります。

何が起こったのか、問題を解決する方法を誰かが説明できれば、助けていただければ幸いです。

ありがとう。

4

1 に答える 1