MySQL 8.4 Release Notes
15.7.8.5 将索引加载到缓存语句
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
列。