CACHE INDEX {
tbl_index_list [, tbl_index_list] ...
| tbl_name PARTITION (partition_list)
}
IN key_cache_name
tbl_index_list:
tbl_name [{INDEX|KEY} (index_name[, index_name] ...)]
partition_list: {
partition_name[, partition_name] ...
| ALL
}
该 缓存索引
语句将表索引分配给特定的键缓存。它仅适用于 MyISAM
表,包括分区的 MyISAM
表。在索引被分配后,可以使用 LOAD INDEX INTO CACHE
预加载到缓存中。
以下语句将表 t1
、t2
和 t3
的索引分配给名为 hot_cache
的键缓存:
mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status | OK |
| test.t2 | assign_to_keycache | status | OK |
| test.t3 | assign_to_keycache | status | OK |
+---------+--------------------+----------+----------+
该 缓存索引
语句的语法允许您指定表中的特定索引分配给缓存。但是,实现将表的所有索引分配给缓存,因此没有理由指定除表名以外的其他内容。
在 缓存索引
语句中引用的键缓存可以通过设置参数或在服务器参数设置中创建。例如:
SET GLOBAL keycache1.key_buffer_size=128*1024;
键缓存参数作为结构化系统变量的成员来访问。请参阅 第 7.1.9.5 节,“结构化系统变量”。
在将索引分配给键缓存之前,必须先创建该缓存,否则将发生错误:
mysql> CACHE INDEX t1 IN non_existent_cache;
ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
默认情况下,表索引被分配给在服务器启动时创建的主(默认)键缓存。当键缓存被销毁时,所有分配给它的索引将被重新分配给默认键缓存。
索引分配对服务器具有全局影响:如果一个客户端将索引分配给某个缓存,那么该缓存将用于所有涉及该索引的查询,无论哪个客户端发出查询。
缓存索引
支持分区的 MyISAM
表。您可以将一个或多个索引分配给某个键缓存,例如:
CREATE TABLE pt (c1 INT, c2 VARCHAR(50), INDEX i(c1))
ENGINE=MyISAM
PARTITION BY HASH(c1)
PARTITIONS 4;
SET GLOBAL kc_fast.key_buffer_size = 128 * 1024;
SET GLOBAL kc_slow.key_buffer_size = 128 * 1024;
CACHE INDEX pt PARTITION (p0) IN kc_fast;
CACHE INDEX pt PARTITION (p1, p3) IN kc_slow;
前面的语句执行以下操作:
-
创建一个具有 4 个分区的分区表;这些分区自动命名为
p0
、…、p3
;该表在列c1
上具有一个名为i
的索引。 -
创建 2 个键缓存,名为
kc_fast
和kc_slow
-
将分区
p0
的索引分配给kc_fast
键缓存,将分区p1
和p3
的索引分配给kc_slow
键缓存;剩余的分区 (p2
) 使用服务器的默认键缓存。
如果您想将表 pt
的所有分区的索引分配给单个键缓存 kc_all
,可以使用以下任一语句:
CACHE INDEX pt PARTITION (ALL) IN kc_all;
CACHE INDEX pt IN kc_all;
刚才显示的两个语句是等效的,发出任一语句都具有完全相同的效果。换言之,如果您想将分区表的所有分区的索引分配给同一个键缓存,那么 PARTITION (ALL)
子句是可选的。
当将多个分区的索引分配给键缓存时,无需将分区名按特定顺序列出,也不需要将它们连续排列。未明确分配给键缓存的任何分区索引将自动使用服务器默认键缓存。
分区 MyISAM
表也支持索引预加载。有关更多信息,请参阅 第 15.7.8.5 节,“LOAD INDEX INTO CACHE 语句”。