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;
キーキャッシュパラメータには、構造化システム変数のメンバーとしてアクセスできます。Structured System Variables を参照してください。
キーキャッシュは、インデックスをそれに割り当てる前に存在していなければいけません。
mysql> CACHE INDEX t1 IN non_existent_cache;
ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
デフォルトではテーブルインデックスは、サーバー起動時に、メイン (デフォルト) キーキャッシュに割り当てられます。キーキャッシュが破壊されるとき、そこに割り当てられたすべてのインデックスはデフォルトキーキャッシュに再び割り当てられます。
インデックスの割り当ては、サーバーにグローバルに影響を与えます。1 つのクライアントが特定のキャッシュにインデックスを割り当てた場合、このキャッシュは、どのクライアントがクエリーを発行したかには関係なく、そのインデックスを含むすべてのクエリーに使用されます。