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语句已将其分配到的键高速缓存中,否则将加载到默认键高速缓存中。
将索引加载到缓存中仅适用于MyISAM
table,包括已分区的MyISAM
table。另外,分区 table 上的索引可以预加载一个,几个或所有分区。
IGNORE LEAVES
修饰符仅导致预加载索引的非叶节点的块。
分区的MyISAM
table 也支持IGNORE LEAVES
。
以下语句预加载 tablet1
和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
预加载非叶节点的块。
将索引加载到缓存中的语法使您可以指定仅应预加载 table 中的特定索引。但是,该实现将 table 的所有索引都预加载到缓存中,因此,除了 table 名外,没有其他必要指定其他内容。
可以在分区的MyISAM
table 的特定分区上预加载索引。例如,在以下 2 条语句中,第一个预加载分区 tablept
的分区p0
的索引,第二个预加载同一 table 的分区p1
和p3
的索引:
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
列。