3
SELECT SQ_CACHE * FROM TABLE where ID=1

質問

  • 新しい行がテーブルに追加された場合、キャッシュは引き続き維持されますか?
  • 更新以外の行ID=1がまだキャッシュを維持している場合はどうなりますか?
  • 同じ行が更新された場合、キャッシュが失われることはわかっています。
4

1 に答える 1

4
  1. キャッシュの無効化について読んでください(これが私が見つけた最初のヒットです)。MySQL(または任意のRDBMS)は、必要なときにいつでもキャッシュされたデータ(の一部)を無効にします。それが実際に行われるとき、これ*あなたの関心事ではないはずです。MySQL(または任意のRDBMS)に処理させます。実際のプロセスは非常に複雑です(または複雑になる可能性があります)。そのため、このようなものは抽象化され、RDBMSによって処理されます。ディスクへのデータの実際の保存についても同じことが言えます。手入れする?それとも、RDBMSに処理させますか?見る?;-)
  2. 1を参照してください。
  3. どうぞ。(そして、これはどのように質問ですか?:P)

*いくつかのコーナーケースやバグは別として。

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

于 2012-07-19T17:00:49.980 に答える