[+/-]
クエリ キャッシュには、SELECT
ステートメントのテキストを、クライアント送信の関連結果を合わせて格納します。後でまったく同じクエリを受け取ると、サーバはそのクエリの解析と実行を繰り返す代わりに、クエリ
キャッシュから結果を取り出します。
テーブルの一部を頻繁には変更することがなく、同じクエリを何度も実行するような環境では、クエリ キャッシュが非常に役立ちます。 動的コンテンツを大量に持つ多くの Web サーバでは、このような状況が一般的です。
注意:クエリキャッシュから古いデータが返ることはありません。データ変更があると、クエリ キャッシュに関連するエントリをすべてフラッシュします。
注意:複数の
mysqld サーバで
同一のMyISAM
テーブルを更新している環境では、クエリ
キャッシュは機能しません。
注意:クエリ キャッシュは、サーバ サイドの準備されたステートメント (準備文) には使用できません。サーバ サイドの準備文がある場合には、クエリ キャッシュの条件を満たしません。詳細は 項23.2.4. 「準備されたC APIステートメント。」 を参照してください。
クエリ キャッシュのパフォーマンスに関するデータの一部を次に示します。これらの結果は、2 GB の RAM、64 MB のクエリキャッシュを搭載する Linux Alpha 2 × 500 MHz での MySQL ベンチマークスィートの実行により生成したものです。
レコードが 1 つしかないテーブルからレコードを 1 つ選択する場合など、実行しているクエリが単純であるに関わらず、互いに異なることが原因で、クエリをキャッシュすることができないときは、クエリ キャッシュをアクティブにしておくことによるオーバーヘッドは 13% になる。 これは最悪の場合のシナリオとみなすことができる。現実には、クエリはこの例よりもはるかに複雑なため、通常オーバーヘッドはかなり低くなる。
レコードが 1 つだけのテーブルでの 1 つのレコードの検索では、238% 迅速化する。これは、キャッシュに格納してるクエリで想定している迅速化の最小値に近い数値である。
クエリ
キャッシュのコードを無効にするには、query_cache_size
=0
と、設定する。クエリ キャッシュ
コードを無効にすると、目立ったオーバーヘッドはなくなる。MySQL
をソースから建てている場合、--without-query-cache
オプションで configure
を呼び出し、クエリ
キャッシュをコードから除外できる。