LOAD INDEX INTO CACHEtbl_index_list
[,tbl_index_list
] ...tbl_index_list
:tbl_name
[[INDEX|KEY] (index_name
[,index_name
] ...)] [IGNORE LEAVES]
LOAD
INDEX INTO CACHE
ステートメントは、明示的な
CACHE INDEX
ステートメントによって割り当てられたキーキャッシュに、またはそうでなければデフォルトのキーキャッシュに、テーブルインデックスをあらかじめロードしておきます。LOAD
INDEX INTO CACHE
は
MyISAM
テーブルにだけ利用されます。ユーザー定義のパーティション分割を含むテーブルに対してはサポートされていません
(Restrictions and Limitations on Partitioning を参照)。
IGNORE LEAVES
修飾子を指定すると、インデックスの非リーフノードに対するブロックのみがプリロードされます。
次のステートメントは、(index blocks) テーブル
t1
と
t2
のインデックスのノード
(インデックスブロック)
をあらかじめロードしておきます。
mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
+---------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------+----------+----------+
| test.t1 | preload_keys | status | OK |
| test.t2 | preload_keys | status | OK |
+---------+--------------+----------+----------+
このステートメントは
t1
からすべてのインデックスブロックをあらかじめロードしておきます。非リーフノードに対するブロックのみを
t2
からプリロードします。
LOAD
INDEX INTO CACHE
の構文によって、テーブルからの特定のインデックスだけがあらかじめロードされなければいけない、と指定することができます。現在のインプリメンテーションは、すべてのテーブルのインデックスをキャッシュ内に割り当てるので、テーブル名以外を指定する利用はないのです。
LOAD INDEX INTO CACHE ... IGNORE
LEAVES
は、テーブル内のすべてのインデックスのブロックサイズが同じでないかぎり失敗します。(MySQL
5.1.19
より前のバージョンでは、IGNORE
LEAVES
を指定しない場合も失敗します。)
myisamchk -dv
を利用し、Blocksize
カラムを確認することで、テーブルのインデックスブロックサイズを決定することができます。