Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

15.7.8.5 LOAD INDEX INTO CACHE 语句

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 表的特定分区的索引。例如,以下两个语句中,第一个预加载分区 p0 的索引,第二个预加载分区 p1p3 的索引:

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