MySQLにはクエリキャッシュの機能があり、これをONにするとクエリ結果をキャッシュから読み出すことが出来て高速な動作が期待できる。
show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 5 rows in set (0.00 sec)
【query_cache_size】が【0】なのでクエリキャッシュが有効ではないことがわかる
「query_cache_type」をONに、「query_cache_size」を0より大きな適切な値に設定する必要がある。
/etc/my.cnf の [mysqld] の項目にクエリキャッシュに関する記述を追加する
[mysqld] # (query_cache_limit)これより大きい結果はキャッシュしない # (query_cache_min_res_unit) 4K が推奨値 # (query_cache_size)クエリキャッシュに割り当てるメモリ(Bytes) # (query_cache_type) 0:OFF 1:ON 2:DEMAND query_cache_limit=1M query_cache_min_res_unit=4k query_cache_size=24M query_cache_type=1
/etc/init.d/mysqld restart (または)service mysqld restart
<pre>SHOW STATUS LIKE 'Qcache%';</pre>
でクエリキャッシュの状態を確認する。
mysql> SHOW STATUS LIKE 'Qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 2 | 空きブロック数 | Qcache_free_memory | 24213616 | 空きメモリのサイズ (バイト) | Qcache_hits | 868 | クエリのヒット数 | Qcache_inserts | 900 | キャッシュに入れられたクエリの数 | Qcache_lowmem_prunes | 0 | メモリが足りないために削除された数 | Qcache_not_cached | 21 | キャッシュに入れられなかったクエリの数 | Qcache_queries_in_cache | 846 | キャッシュ内のクエリの数 | Qcache_total_blocks | 1711 | ブロックの領域の合計 +-------------------------+----------+ 8 rows in set (0.00 sec)
【Qcache_lowmem_prunes】を注意深く見ればいいことがわかります。
キャッシュは SELECT文にのみ適用される。
MySQL4.1以前を使用している場合 SQL文 の 'SELECT' の前に スペースが入っているとクエリキャッシュが有効にならないので注意。
(MySQL は先頭3文字のみを見て SEL であった場合のみクエリキャッシュに格納します。)