标签:
在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;
标签:
原文地址:http://www.cnblogs.com/JiangLe/p/4491362.html