SELECT SQ_CACHE * FROM TABLE where ID=1
質問:
- 新しい行がテーブルに追加された場合、キャッシュは引き続き維持されますか?
- 更新以外の行
ID=1
がまだキャッシュを維持している場合はどうなりますか? - 同じ行が更新された場合、キャッシュが失われることはわかっています。
SELECT SQ_CACHE * FROM TABLE where ID=1
質問:
ID=1
がまだキャッシュを維持している場合はどうなりますか?*いくつかのコーナーケースやバグは別として。
「短い」答え(注:MySQLに固有)は次のようになります。AFAIKMySQLはテーブルレベルの粒度でキャッシュします。そのため、そのテーブルを変更すると、そのテーブルのキャッシュされたすべての結果が無効になります。それ以外は、決定論的なクエリのみがキャッシュされ、トランザクションはキャッシュをバイパス/無効化する可能性があります。クエリキャッシュはプリペアドステートメントをサポートしていません。キャッシュを開始するには、クエリが完全に同じである必要があります(したがって、クエリはキャッシュミスを引き起こします)、サブクエリはサポートされていません。そして、まだ他の要因が関係しています。最近のバージョンではいくつかの変更があったかもしれませんが、これらは、以前は関係していた要因の一部(すべてではありません!)です。私が間違っている場合は私を訂正してください。