MySQL 表分区A

  在MySQL中表的分区类型总的来说有四种:

第一种:range分区、基于一个给定的区间范围,把数据分配到不同的分区。

第二种:list   分区、基本枚举的值列表进行分区。

第三种:hast 分区、基于分区个数把数据分到不同的分区。

第四种:key  分区、与hash分区差不多。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

  第一种:range 分区、在MySQL 5.1中只支持int 类型的字段进行分区、5.5后增加了对datetime 与varchar 的支持 只是要把range 改成range columns 才可以

    例一:int 类的range分区 create table t3(x int, y int) partition by range (x) (partition p0 values less than(100),partition p1 values less than(200));

    例二:为表增加一个分区

    alter table t3 add partition (partition p2 values less than(maxvalue));

    例三:varchar or datetime 类型的分区

    create table t4(x varchar(32),y varchar(32)) partition by range columns (x) (partition p0 values less than('100'),partition p2 values less                       than(maxvalue));

  第二种:list 分区、在list 分区中不存在values less than(maxvalues) 这样的定义方式;也就是说插入的值如果列表中没有列出就会报错。

           list 也是支持 varchar 这样的数据类型的只是要加 columns 这个关键字

    例一:create table t5(x int,y int) partition by list (x) (partition p0 values in (1,3,5,7,9),partition p1 values in (2,4,6,8));

    例二:create table t6(x varchar(100),y varchar(100)) partition by list columns (x) (partition p0 values in ('a'),partition p1 values in ('b'));

  第三种:hash 分区、主要用来分散热点读,确保数据在各个分区中尽可能平均的分布。普通hash 用的是取模算法、打个比方如果分四个区、

    新插入的数据会到哪个分区当中去是根据分区键除四取模得到的。然而这个会带来问题,如我们把分区加到5的时候以前的老数据都会重新算

    一次才可以确定这行数据要存在哪个分区里。这会引起性能问题。

    create table t7(x int,y int) partition by hash (x) partitions 5;-- hash(expr) expr 如果为一个返回整数的表达式也是可以的。

  第四种:key 分区、和hash分区相差不大。它有两大优点一它支持text,blob 之外的所有数据类型、二它可以指定多个列。

    create table t8(x varchar(32),y varchar(32)) partition by key(x,y) partitions 4;

 

posted on 2015-05-09 22:47  蒋乐兴的技术随笔  阅读(524)  评论(0编辑  收藏  举报

导航