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 表。此外,还可以为分区表上的索引预加载一个、多个或所有分区。
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 表的特定分区进行索引预加载。例如,在以下两个语句中,第一个语句对分区表 pt 的分区 p0 进行索引预加载,而第二个语句对同一表的 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;上面显示的两个语句是等效的,执行其中任何一个都具有完全相同的效果。换句话说,如果您想对分区表的全部分区进行索引预加载,则 PARTITION (ALL) 子句是可选的。
在对多个分区进行索引预加载时,这些分区不需要连续,也不需要以任何特定顺序列出。
LOAD INDEX INTO CACHE ... IGNORE LEAVES 除非表中的所有索引具有相同的块大小,否则将失败。要确定表的索引块大小,请使用 myisamchk -dv 并检查 Blocksize 列。