LOAD INDEX INTO CACHE
tbl_index_list [, tbl_index_list] ...
tbl_index_list:
tbl_name
[PARTITION (partition_list)]
[{INDEX|KEY} (index_name[, index_name] ...)]
[IGNORE LEAVES]
partition_list: {
partition_name[, partition_name] ...
| ALL
}
LOAD INDEX INTO CACHE
ステートメントは、明示的な CACHE INDEX
ステートメントによって割り当てられたキーキャッシュ、またはそれ以外の場合はデフォルトのキーキャッシュにテーブルインデックスをプリロードします。
LOAD INDEX INTO CACHE
は、パーティション化された MyISAM
テーブルを含む MyISAM
テーブルにのみ適用されます。 また、パーティションテーブルのインデックスは、1 つ、複数またはすべてのパーティションに対して事前ロードできます。
IGNORE LEAVES
修飾子によって、インデックスの非リーフノードのブロックのみがプリロードされます。
IGNORE LEAVES
は、パーティション化された MyISAM
テーブルに対してもサポートされます。
次のステートメントは、テーブル 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
の構文では、テーブルの特定のインデックスのみをプリロードするように指定できます。 ただし、実装ではすべてのテーブルインデックスがキャッシュに事前ロードされるため、テーブル名以外は指定する必要はありません。
パーティション化された MyISAM
テーブルの特定のパーティションでインデックスを事前ロードできます。 たとえば、次の 2 つのステートメントでは、最初が、パーティション化されたテーブル pt
のパーティション p0
のインデックスをプリロードするのに対して、2 番目は同じテーブルのパーティション p1
と p3
のインデックスをプリロードします。
LOAD INDEX INTO CACHE pt PARTITION (p0);
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);
テーブル pt
のすべてのパーティションのインデックスを事前ロードするには、次のいずれかのステートメントを使用します:
LOAD INDEX INTO CACHE pt PARTITION (ALL);
LOAD INDEX INTO CACHE pt;
ここで示した 2 つのステートメントは同等であり、どちらか一方を発行してもまったく同じ効果があります。 つまり、パーティションテーブルのすべてのパーティションのインデックスを事前ロードする場合、PARTITION (ALL)
句はオプションです。
複数のパーティションのインデックスを事前ロードする場合、パーティションは連続している必要はなく、パーティション名を特定の順序でリストする必要はありません。
LOAD INDEX INTO CACHE ... IGNORE LEAVES
は、テーブル内のすべてのインデックスのブロックサイズが同じでないかぎり失敗します。 テーブルのインデックスブロックサイズを決定するには、myisamchk -dv を使用して Blocksize
カラムを確認します。