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
分区表
也支持。
以下语句预加载表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
,而第二个预加载分区p1
和p3
同一张表的索引:
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
列。