mysql 多列復合分割槽 MySQL復合分割槽

2021-10-17 23:48:23 字數 2698 閱讀 8683

到底還是開源軟體,mysql對復合分割槽的支援遠遠沒有oracle豐富。

在mysql 5.6版本中,只支援range和list的子分割槽,且子分割槽的型別只能為hash和key。

譬如:create table ts (id int, purchased date)

partitionby range( year(purchased) )

subpartitionbyhash( to_days(purchased) )

subpartitions2(

partition p0values less than (1990),

partition p1values less than (2000),

partition p2valuesless than maxvalue

上述建立語句中,最外層是range分割槽,分為3個區,裡面是hash子分割槽,分為2個區,這樣,該錶一共分了3*2=6個分割槽。

當然,也可以用subpartition語句來顯示定義子分割槽。

create table ts (id int, purchased date)

partitionby range( year(purchased) )

subpartitionbyhash( to_days(purchased) ) (

partition p0values less than (1990) (

subpartition s0,

subpartition s1

partition p1values less than (2000) (

subpartition s2,

subpartition s3

partition p2valuesless than maxvalue (

subpartition s4,

subpartition s5

注意:1> 如果你在分割槽中使用了subpartition語句,則每個分割槽中都必須定義,且每個分割槽中子分割槽的數量必須保持一致。譬如以下兩種用法就會報錯:

create table ts (id int, purchased date)

partitionby range( year(purchased) )

subpartitionbyhash( to_days(purchased) ) (

partition p0values less than (1990) (

subpartition s0,

subpartition s1

partition p1values less than (2000) (

subpartition s2

partition p2valuesless than maxvalue (

subpartition s3,

subpartition s4

create table ts (id int, purchased date)

partitionby range( year(purchased) )

subpartitionbyhash( to_days(purchased) ) (

partition p0values less than (1990) (

subpartition s0,

subpartition s1

partition p1values less than (2000),

partition p2valuesless than maxvalue (

subpartition s2,

subpartition s3

2> 在subpartition語句中,可指定該分割槽的物理位置。譬如:

create table ts (id int, purchased date)

partitionby range(year(purchased))

subpartitionbyhash( to_days(purchased) ) (

partition p0values less than (1990) (

subpartition s0a

data directory= 『/disk0『

index directory = 『/disk1『,

subpartition s0b

data directory= 『/disk2『

index directory = 『/disk3『),

partition p1values less than (2000) (

subpartition s1a

data directory= 『/disk4/data『

index directory = 『/disk4/idx『,

subpartition s1b

data directory= 『/disk5/data『

index directory = 『/disk5/idx『),

partition p2valuesless than maxvalue (

subpartition s2a,

subpartition s2b

以上這個建立語句,將不同的分割槽分布到不同的物理路徑下,無疑會極大的分散io,這一點還是蠻吸引人的。

可惜,在本機測試過程中,報「error 1030 (hy000): got error -1 from storage engine」錯誤,具體原因還不太清楚,懷疑是mysql的bug。

參考:原文:

mysql drop 多列 MySQL多列分割槽

drop table if exists partition test create table partition test t id int 11 not null auto increment,test date datetime not null,t key varchar 16 test ...

MySQL 多列分割槽詳解

多列分割槽 columns關鍵字現在允許字串和日期列作為分割槽定義列,同時還允許使用多個列定義乙個分割槽,你可能在官方文件中已經看到了一些例子,如 drop table if exists partition test create tablepartition test t idint 11 no...

MYSQL復合分割槽

復合分割槽是分割槽表中每個分割槽的再次分割,子分割槽既可以使用hash分割槽,也可以使用key分割槽。這也被稱為子分割槽。提示 mysql只能子分割槽只能使用 hash key 分割槽,這也是與oracle的區別。復合分割槽需要注意以下問題 建立range hash復合分割槽的命令如下 create...