CACHE INDEX语句
CACHE INDEX { tbl_index_list [, tbl_index_list] ... | tbl_namePARTITION (partition_list) }IN key_cache_name tbl_index_list: tbl_name [{INDEX |KEY } (index_name[, index_name] ...)] partition_list: { partition_name[, partition_name] ... |ALL }
该CACHE INDEX
语句将表索引分配给特定的键高速缓存。它仅适用于MyISAM
表,包括分区MyISAM
表。分配索引后,可以根据需要将它们预加载到缓存中LOAD INDEX INTO CACHE
。
从表中下面的语句受让人指标t1
,t2
以及t3
向键缓存命名为hot_cache
:
mysql>CACHE INDEX t1, t2, t3IN 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 | +--------- +-------------------- +---------- +---------- +
语法CACHE INDEX
使您可以指定仅将表中的特定索引分配给高速缓存。但是,该实现将表的所有索引分配给高速缓存,因此,除了表名外,没有其他必要指定任何内容。
CACHE INDEX
可以通过使用参数设置语句或在服务器参数设置中设置其大小来创建语句中引用的键高速缓存。例如:
SET GLOBAL keycache1.key_buffer_size=128*1024;
关键高速缓存参数作为结构化系统变量的成员进行访问。请参见“性能模式系统变量”。
在为其分配索引之前,键高速缓存必须存在,否则会发生错误:
mysql>CACHE INDEX t1IN non_existent_cache; ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
默认情况下,表索引分配给服务器启动时创建的主(默认)键高速缓存。销毁键高速缓存时,分配给它的所有索引都将重新分配给默认键高速缓存。
索引分配会全局影响服务器:如果一个客户端将索引分配给给定的缓存,则该缓存将用于涉及该索引的所有查询,无论哪个客户端发出查询。
CACHE INDEX
支持分区MyISAM
表。您可以将一个,多个或所有分区的一个或多个索引分配给给定的键高速缓存。例如,您可以执行以下操作:
CREATE TABLE pt (c1 INT, c2 VARCHAR(50),INDEX i(c1))ENGINE =MyISAMPARTITION 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 ptPARTITION (p0)IN kc_fast;CACHE INDEX ptPARTITION (p1, p3)IN kc_slow;
上一组语句执行以下操作:
- 创建一个包含4个分区的分区表;这些分区会自动命名为
p0
,...,p3
;该表的索引名为i
columnc1
。 - 创建两个名为
kc_fast
和的密钥缓存kc_slow
- 受让人为分区的索引
p0
的kc_fast
键缓存和用于分区的索引p1
和p3
到kc_slow
键缓存;其余分区的索引(p2
)使用服务器的默认键缓存。
如果希望将表中所有分区的索引分配给pt
名为的单个键高速缓存kc_all
,则可以使用以下两个语句之一:
CACHE INDEX ptPARTITION (ALL )IN kc_all;CACHE INDEX ptIN kc_all;
刚刚显示的两个语句是等效的,发出其中一个具有完全相同的效果。换句话说,如果您希望将分区表的所有分区的索引分配给同一键高速缓存,则该PARTITION(ALL)
子句是可选的。
在将多个分区的索引分配给键高速缓存时,这些分区不必是连续的,并且您无需以任何特定顺序列出其名称。未明确分配给键高速缓存的任何分区的索引将自动使用服务器默认键高速缓存。
分区MyISAM
表还支持索引预加载。有关更多信息,请参见“LOAD INDEX INTO CACHE语句”。