Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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 表。

以下语句预加载表 t1t2 的索引节点(索引块):

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列。