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
列。