到底還是開源軟體,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...