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