CACHE INDEXtbl_index_list
[,tbl_index_list
] ... INkey_cache_name
tbl_index_list
:tbl_name
[[INDEX|KEY] (index_name
[,index_name
] ...)]
CACHE INDEX
ステートメントはテーブル
インデックスを特定のキー
キャッシュに割り当てます。これは
MyISAM
テーブルにしか利用されません。
次のステートメントは、インデックスをテーブル
t1
、t2
、そして
t3
から hot_cache
という名前のキー
キャッシュに割り当てます。
mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status | OK |
| test.t2 | assign_to_keycache | status | OK |
| test.t3 | assign_to_keycache | status | OK |
+---------+--------------------+----------+----------+
CACHE INDEX
の構文によって、テーブルからの特定のインデックスだけがキャッシュに割り当てられなければいけない、と指定する事ができます。現在のインプリメンテーションは、全てのテーブルのインデックスをキャッシュに割り当てるので、テーブル名以外を指定する利用は無いのです。
CACHE INDEX
ステートメント内で参照されるキー
キャッシュは、パラメータ設定ステートメントを設定するか、サーバ
パラメータ設定の中で作成できます。例:
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;
キー キャッシュ パラメータには、構造化システム変数のメンバとしてアクセスできます。詳しくは 項4.2.4.1. 「構造化システム変数」 を参照してください。
キー キャッシュは、インデックスをそれに割り当てる前に存在していなければいけません。
mysql> CACHE INDEX t1 IN non_existent_cache;
ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
デフォルトで、テーブル インデックスは、サーバ起動時に作成された主要(デフォルト)キー キャッシュに割り当てられます。キー キャッシュが破壊される時、そこに割り当てられた全てのインデックスはデフォルト キーキャッシュに再び割り当てられます。
インデックスの割り当ては、サーバに対してグローバルに影響します。もし1つのクライアントが既存のキャッシュにインデックスを割り当てると、どのクライアントがクエリを発行したかに関わらず、このキャッシュはそのインデックスを含む全てのクエリに対して利用されます。