暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 - 数据库管理语句 - 其他管理语句 - CACHE INDEX 语句

数据库杂货铺 2021-04-25
262
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'
           
          默认情况下,表索引分配给服务器启动时创建的主(默认)键缓存。销毁键缓存时,分配给它的所有索引都将重新分配给默认键缓存。
           
          索引分配会全局地影响服务器:如果一个客户端将索引分配给指定缓存,则该缓存将用于涉及该索引的所有查询,而不管是哪个客户端执行查询。
           
          分区 MyISAM 表支持 CACHE INDEX。可以将一个、多个或所有分区的一个或多个索引分配给给定的键缓存。例如,可以执行以下操作:
           
            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 的索引。
             
             创建两个键缓存 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 表也支持索引预加载。
               
               
              BINLOG 语句
               
                BINLOG 'str'
                 
                BINLOG 是一个内部使用语句。它由 mysqlbinlog 程序生成,作为二进制日志文件中某些事件的可打印表示。'str' 值是一个 base64 编码的字符串,服务器对该字符串进行解码,以确定相应事件指示的数据更改。
                 
                要在应用 mysqlbinlog 输出时执行 BINLOG 语句,用户帐户需要 BINLOG_ADMIN 权限(或不推荐的 SUPER 权限)或 REPLICATION_APPLIER 权限加上适当的权限来执行每个日志事件。
                 
                此语句只能执行格式描述事件和行事件。
                 
                 
                 
                 
                 
                官方文档:
                https://dev.mysql.com/doc/refman/8.0/en/cache-index.html
                https://dev.mysql.com/doc/refman/8.0/en/binlog.html
                 
                文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论