mysql子分区多少层_MySQL 子分区-阿里云开发者社区
介紹
子分區(qū)其實(shí)是對(duì)每個(gè)分區(qū)表的每個(gè)分區(qū)進(jìn)行再次分隔,目前只有RANGE和LIST分區(qū)的表可以再進(jìn)行子分區(qū),子分區(qū)只能是HASH或者KEY分區(qū)。子分區(qū)可以將原本的數(shù)據(jù)進(jìn)行再次的分區(qū)劃分。
一、創(chuàng)建子分區(qū)
子分區(qū)由兩種創(chuàng)建方法,一種是不定義每個(gè)子分區(qū)子分區(qū)的名字和路徑由分區(qū)決定,二是定義每個(gè)子分區(qū)的分區(qū)名和各自的路徑
1.不定義每個(gè)子分區(qū)
CREATE TABLE tb_sub (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) )
SUBPARTITIONS2(
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN MAXVALUE
);
SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tb_sub';
2.定義每個(gè)子分區(qū)
定義子分區(qū)可以為每個(gè)子分區(qū)定義具體的分區(qū)名和分區(qū)路徑
CREATE TABLE tb_sub_ev (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990) (
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION p1 VALUES LESS THAN (2000) (
SUBPARTITION s2,
SUBPARTITION s3
),
PARTITION p2 VALUES LESS THAN MAXVALUE (
SUBPARTITION s4,
SUBPARTITION s5
)
);
3.測(cè)試數(shù)據(jù)
INSERT INTO tb_sub_ev() VALUES(1,'1989-01-01'),(2,'1989-03-19'),(3,'1989-04-19');
當(dāng)往里面插入三條記錄時(shí),其中‘1989-01-01’和‘1989-04-19’存儲(chǔ)在p0_s0分區(qū)中,‘1989-03-19’存儲(chǔ)在p0_s1當(dāng)中
二、分區(qū)管理
分區(qū)管理和RANGE、LIST的分區(qū)管理是一樣的
1.合并分區(qū)
將p0,p1兩個(gè)分區(qū)合并
ALTER TABLE tb_sub_ev REORGANIZE PARTITION p0,p1 INTO (
PARTITION m1 VALUES LESS THAN (2000)
( SUBPARTITION n0,
SUBPARTITION n1
)
);
注意:合并分區(qū)的子分區(qū)也必須是兩個(gè),這點(diǎn)需要理解,因?yàn)楸仨毢蛣?chuàng)建分區(qū)時(shí)每個(gè)分區(qū)只有兩個(gè)子分區(qū)保持一致,合并分區(qū)不會(huì)造成數(shù)據(jù)的丟失。
2.拆分分區(qū)
ALTER TABLE tb_sub_ev REORGANIZE PARTITION m1 INTO (
PARTITION p0 VALUES LESS THAN (1990) (
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION p1 VALUES LESS THAN (2000) (
SUBPARTITION s2,
SUBPARTITION s3
)
);
同樣,拆分分區(qū)也必須保證每個(gè)分區(qū)是兩個(gè)子分區(qū)。
3.刪除分區(qū)
ALTER TABLE tb_sub_ev DROP PARTITION P0;
注意:由于分區(qū)是RANGE和LIST分區(qū),所以刪除分區(qū)也是同RANGE和LIST分區(qū)一樣,這里只能對(duì)每個(gè)分區(qū)進(jìn)行刪除,不能針對(duì)每個(gè)子分區(qū)進(jìn)行刪除操作,刪除分區(qū)后子分區(qū)連同數(shù)據(jù)一并被刪除。
三、錯(cuò)誤的子分區(qū)創(chuàng)建
1.要不不定義各個(gè)子分區(qū)要不就每個(gè)都需要定義
CREATE TABLE tb_sub_ev_nex (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990) (
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN MAXVALUE (
SUBPARTITION s4,
SUBPARTITION s5
)
);
這里由于分區(qū)p1沒(méi)有定義子分區(qū),所以創(chuàng)建分區(qū)失敗
四、移除表的分區(qū)
ALTER TABLE tablename
REMOVE PARTITIONING ;
注意:使用remove移除分區(qū)是僅僅移除分區(qū)的定義,并不會(huì)刪除數(shù)據(jù)和drop PARTITION不一樣,后者會(huì)連同數(shù)據(jù)一起刪除
分區(qū)系列文章:
總結(jié)
子分區(qū)的好處是可以對(duì)分區(qū)的數(shù)據(jù)進(jìn)行再分,這樣數(shù)據(jù)就更加的分散,同時(shí)還可以對(duì)每個(gè)子分區(qū)定義各自的存儲(chǔ)路徑,這部分內(nèi)容在指定各分區(qū)路徑的下一篇文章中單獨(dú)進(jìn)行講解。
本文轉(zhuǎn)自pursuer.chen(陳敏華)博客園博客,原文鏈接:http://www.cnblogs.com/chenmh/p/5649447.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的mysql子分区多少层_MySQL 子分区-阿里云开发者社区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (linux was 乱码)
- 下一篇: mysql firebird 性能_Fi