文档首页
MySQL 9.0 参考手册
相关文档 下载本手册

MySQL 9.0 参考手册  /  ...  /  LOAD INDEX INTO CACHE 语句

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 表的特定分区进行索引预加载。例如,在以下两个语句中,第一个语句对分区表 pt 的分区 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 列。