• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • CACHE INDEX语句

    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
    }
    

    CACHE INDEX语句将表索引分配给特定的键高速缓存。它仅适用于MyISAM表,包括分区MyISAM表。分配索引后,可以根据需要将它们预加载到缓存中LOAD INDEX INTO CACHE

    从表中下面的语句受让人指标t1t2以及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       	|
    +---------	+--------------------	+----------	+----------	+
    

    语法CACHE INDEX使您可以指定仅将表中的特定索引分配给高速缓存。但是,该实现将表的所有索引分配给高速缓存,因此,除了表名外,没有其他必要指定任何内容。

    CACHE INDEX可以通过使用参数设置语句或在服务器参数设置中设置其大小来创建语句中引用的键高速缓存。例如:

    SET GLOBAL keycache1.key_buffer_size=128*1024;
    

    关键高速缓存参数作为结构化系统变量的成员进行访问。请参见“性能模式系统变量”。

    在为其分配索引之前,键高速缓存必须存在,否则会发生错误:

    mysql> CACHE INDEX t1 IN 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=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;该表的索引名为icolumn c1
    • 创建两个名为kc_fast和的密钥缓存kc_slow
    • 受让人为分区的索引p0kc_fast键缓存和用于分区的索引p1p3kc_slow键缓存;其余分区的索引(p2)使用服务器的默认键缓存。

    如果希望将表中所有分区的索引分配给pt名为的单个键高速缓存kc_all,则可以使用以下两个语句之一:

    CACHE INDEX pt PARTITION (ALL) IN kc_all;
    
    CACHE INDEX pt IN kc_all;
    

    刚刚显示的两个语句是等效的,发出其中一个具有完全相同的效果。换句话说,如果您希望将分区表的所有分区的索引分配给同一键高速缓存,则该PARTITION(ALL)子句是可选的。

    在将多个分区的索引分配给键高速缓存时,这些分区不必是连续的,并且您无需以任何特定顺序列出其名称。未明确分配给键高速缓存的任何分区的索引将自动使用服务器默认键高速缓存。

    分区MyISAM表还支持索引预加载。有关更多信息,请参见“LOAD INDEX INTO CACHE语句”。

    上篇:BINLOG语句

    下篇:FLUSH语句