文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  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 表的特定分区上。例如,在以下 2 个语句中,第一个语句会将分区 p0 的索引预加载到已分区的表 pt 中,而第二个语句会将分区 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 列。