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 回実行すると、通常の速度に戻ります。
何が起こったのか、問題を解決する方法を誰かが説明できれば、助けていただければ幸いです。
ありがとう。