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
}

将索引加载到缓存中语句将 table 索引预加载到显式CACHE INDEX语句已将其分配到的键高速缓存中,否则将加载到默认键高速缓存中。

将索引加载到缓存中仅适用于MyISAMtable,包括已分区的MyISAMtable。另外,分区 table 上的索引可以预加载一个,几个或所有分区。

IGNORE LEAVES修饰符仅导致预加载索引的非叶节点的块。

分区的MyISAMtable 也支持IGNORE LEAVES

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

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预加载非叶节点的块。

将索引加载到缓存中的语法使您可以指定仅应预加载 table 中的特定索引。但是,该实现将 table 的所有索引都预加载到缓存中,因此,除了 table 名外,没有其他必要指定其他内容。

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

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

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

LOAD INDEX INTO CACHE pt PARTITION (ALL);

LOAD INDEX INTO CACHE pt;

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

当预加载多个分区的索引时,这些分区不必是连续的,并且您无需以任何特定 Sequences 列出它们的名称。

将索引加载到缓存中...留下更多失败,除非 table 中的所有索引具有相同的块大小。要确定 table 的索引块大小,请使用myisamchk -dv并检查Blocksize列。