Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.7 数据库管理语句  / 13.7.8 其他行政报表  /  13.7.6.5 LOAD INDEX INTO CACHE 语句

13.7.6.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 LEAVESMyISAM分区表 也支持。

以下语句预加载表t1和索引的节点(索引块) t2

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使您能够指定仅应预加载表中的特定索引。然而,该实现将表的所有索引预加载到缓存中,因此除了表名之外没有理由指定任何其他内容。

仅在 MySQL 5.6.11 中,gtid_next 必须AUTOMATIC在发出此语句之前设置为。(错误#16062608、错误#16715809、错误#69045)

MyISAM可以在分区表 的特定分区上预加载索引。例如,在以下 2 条语句中,第一个预加载p0分区表的分区 索引pt,而第二个预加载分区p1p3同一张表的索引:

LOAD INDEX INTO CACHE pt PARTITION (p0);
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);

要为 table 中的所有分区预加载索引 pt,您可以使用以下两个语句之一:

LOAD INDEX INTO CACHE pt PARTITION (ALL);

LOAD INDEX INTO CACHE pt;

刚才显示的两个语句是等价的,发出任何一个都具有完全相同的效果。换句话说,如果您希望为分区表的所有分区预加载索引,则该 PARTITION (ALL)子句是可选的。

当为多个分区预加载索引时,分区不需要是连续的,并且您不需要以任何特定顺序列出它们的名称。

LOAD INDEX INTO CACHE ... IGNORE LEAVES除非表中的所有索引都具有相同的块大小,否则失败。要确定表的索引块大小,请使用myisamchk -dv并检查该 Blocksize列。