通常は 1 秒未満で実行されるクエリを使用していますが、完了するまでに 10 ~ 40 秒かかる場合があります。サブクエリがどのように機能するかについては、実際には完全に明確ではありません。faverprofileid ごとに 15 行が得られるという点で、それが機能することだけはわかっています。
遅いクエリをログに記録すると、5823244 行が検査されたことがわかります。これは、関連するテーブルのいずれにもそれほど多くの行がないため、奇妙です (お気に入りテーブルには 50,000 行が最も多くあります)。
誰かが私にいくつかの指針を提供できますか? サブクエリの問題であり、ファイルソートを使用する必要がありますか?
編集: Explain を実行すると、 users テーブルがインデックスを使用していないことが示されます (id が主キーであっても)。余分な下には、次のように書かれています:一時的な使用。ファイルソートの使用。
SELECT F.id,F.created,U.username,U.fullname,U.id,I.*
FROM favorites AS F
INNER JOIN users AS U ON F.faver_profile_id = U.id
INNER JOIN items AS I ON F.notice_id = I.id
WHERE faver_profile_id IN (360,379,95,315,278,1)
AND F.removed = 0
AND I.removed = 0
AND F.collection_id is null
AND I.nudity = 0
AND (SELECT COUNT(*) FROM favorites WHERE faver_profile_id = F.faver_profile_id
AND created > F.created AND removed = 0 AND collection_id is null) < 15
ORDER BY F.faver_profile_id, F.created DESC;