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
表的特定分区上。例如,在以下 2 个语句中,第一个语句会将分区 p0
的索引预加载到已分区的表 pt
中,而第二个语句会将分区 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
列。