MySQL 8.3 Release Notes
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
表的特定分区的索引。例如,以下两个语句中,第一个预加载分区 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
列。