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