標籤:
在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;
MySQL 表分區A