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