多くのネストされた SELECT ステートメントを含む大きなクエリがあります。簡略化されたバージョンは次のようになります。
SELECT * FROM tableA WHERE x IN(
SELECT * FROM tableB WHERE x IN(
SELECT * FROM tableC WHERE user_id = y
)
)
重要なことに、最も内側のステートメントは、user_id を見て、クエリの残りの部分で使用する ID 番号のリストを選択することから始まります。
私が抱えている問題は、2 人のユーザーが tableC に同じデータを持っていても、残りのクエリがキャッシュされていないように見えることです。
たとえば、SELECT * FROM tableC WHERE user_id = 1
(1,2,3,4,5) を返し、(1,2,3,4,5)SELECT * FROM tableC WHERE user_id = 2
も返す場合
user_id = 1 で完全なクエリを実行すると、実行時間は約 0.007 秒です。クエリを再実行すると、実行時間が 0.002 短縮されます。user_id を 2 に変更してクエリを実行すると、クエリの初回実行時に実行時間が 0.007 に戻ります。mySQL がクエリの個々の部分の結果をキャッシュすることは可能ですか?