• mysql 原理~ 分区表


    一 简介:今天来聊聊分区表的概念和维护
    二分区的优点:
      1.提高查询性能:只需要搜索特定分区,而非整张表,提高了查询速度。
      2.节约维护时间:单个分区的数据装载,索引重建,备份,维护远远小于整张表的维护时间
    三 分区类型
      1 RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。存在maxvalue限制
      2 LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
      3 HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
      4 KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
    三 分区限制和注意事项
     1.主键或者唯一索引必须包含分区字段,如primary key (id,username),这里需要注意,分区表不一定会有主键/唯一键.,但是一旦有主键或者唯一键,就必须包含分区字段
     2.很多时候,使用分区就不要在使用主键了,否则可能影响性能。
     3.每个表最多1024个分区,而且多分区会大量消耗内存,所以不要建立过多不用的分区
     4.分区的表不支持外键,相关的逻辑约束需要使用程序来实现。
     5.分区后,可能会造成索引失效,需要验证分区可行性。
     6.分区表在server层被认为是一张表,所以会共享MDL锁,这点在做DDL操作时非常重要,可能导致锁等待
     7.分区规则必须要提前设立好,否则修改会很麻烦
    四 分区表管理操作
      alter table user drop partition user_3; //删除分区
      alter table user add partition partitions 8; //新增hash/key分区
      alter table user add partition(partition user_3 values less than maxvalue);//新增range分区
      ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13)); //分区合并 po可以为不存在的分区
    五 普通表转化为分区表
      方案1
     1 建立好新的分区表
     2 程序导入数据
    方案 2
     1 alter table table_name partition by命令重建分区表
     2 关于分区表字段主键问题要特别注意,因为有的分区类型需要联合主键,所以要对原表进行改造
    六 分区表与普通表互相转化

        采用pt-osc执行

    七 注意

     1 ALTER TABLE T1 REMOVE PARTITIONING 建议用PT-OSC执行,否则会锁表
     2 用remove移除分区是仅仅移除分区的定义,并不会删除数据和drop PARTITION不一样,后者会连同数据一起删除
    八  分区表扩展
      1 如果开始定义的时候分区过少,有可能导致程序插入数据后期报错,因为分区不够用,建议采用存储过程自动扩展,这是最好的方法、
      2 对于range分区到达maxvalue的情况 可以采用重建range分区的方法进行
       Alter table emp partition by range(salary)
      (
      partition p1 values less than (2000),
      partition p2 values less than (4000)
       );
    九 5.7 分区新特性
     mysql 5.7 分区新特性
     1 MySQL 5.7支持 分区 & 物理表 直接交换 的新特性,将历史分区交换到外部物理表,再归档到历史库里
        eg ALTER TABLE t1 EXCHANGE PARTITION p20160101 WITH TABLE t1_20160101;
     2 mysql 5.7 分区表开始支持icp特性
     3 子分区支持ANALYZE,CHECK,OPTIMIZE,REPAIR和TRUNCATE操作;

  • 相关阅读:
    如何实现进程间的通信
    调试手记
    WinCE的一些忠告——UNICODE编码
    一道字符串复制的面试题目
    strcpy和strncpy区别
    关于#include头文件问题
    rs232串口通讯中,读串口与读端口的区别
    IP包过滤(转)
    小数点后截位问题
    一些函数
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/8317292.html
Copyright © 2020-2023  润新知