MySQL 子分区

介绍

子分区其实是对种种分区表的种种分区举行再一次分隔,近日唯有RANGE和LIST分区的表可以再开始展览子分区,子分区只好是HASH可能KEY分区。子分区可以将原本的数量开始展览双重的分区划分。

 

 

MySQL 子分区,mysql分区

介绍

LIST分区和RANGE分区分外的貌似,主要不一样在于LIST是枚举值列表的集结,RANGE是一连的区间值的集结。2者在语法方面丰盛的相似。一样提出LIST分区列是非null列,不然插入null值借使枚举列表里面不存在null值会插入退步,那点和此外的分区不均等,RANGE分区会将其视作最小分区值存款和储蓄,HASH\KEY分为会将其转移成0存款和储蓄,首要LIST分区只扶助整形,非整形字段须要通过函数调换来整形;5.伍本子之后方可不必要函数转换使用LIST
COLUMN分区补助非整形字段,在COLUMN分区中有详细的上课。

 

一、成立分区

List各种分区枚举的值只供给不平等就可以,未有永恒的逐条。

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);

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='tblist';

997755.com澳门葡京 1

 1.插入数据

insert into tblist(id,store_id) values(1,1),(7,7); 

往a、b四个分区中各插入一条记下

997755.com澳门葡京 2

2.插入不在列表中的值

997755.com澳门葡京 3 

当往分区中插入不在枚举列表中的值是会插入战败,插入null值要是null值不在枚举列表中也同等退步

二、分区管制

一.充实分区

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

只顾:不能够扩张包涵现存任意值的分区。

贰.集合分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

将分区a,b合并为分区m

专注:同RANGE分区同样,只能合并相邻的多少个分区,不可能跨分区合并。例如无法合并a,c多个分区,只好通过合并a,b,c

997755.com澳门葡京 4

三.拆分分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

ALTER TABLE tblist REORGANIZE PARTITION  n INTO 
    ( PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (3,9,10));

997755.com澳门葡京 5

通过两轮的拆分,枚举列表(三,玖,拾)排到了(二,七,8)的眼前去了;其实是如此的,壹发轫统一abc成nm五个分区由于n中的枚举值小于m所以n在m的前头,前面再拆分n分区由于n分区在m分区的前方所以拆分出去的分区也是排在m分区的先头,由于a分区的值稍低于b分区的值所以a排在b的眼下。

瞩目:一.在伍.七.1贰本子中测试发现,合并和拆分分区重新定义的枚举值能够不是原先的值,假诺原先的枚举值包括了数额而新合并或拆分的分区枚举值又不不带有原来的枚举值会招致数据丢失。就算不亮堂为什么mysql不会禁止该作为,不过人为的渴求无论是合并也许拆分分区枚举值保持不改变,大概只好增添无法收缩,那样能保障数据不丢掉。

贰.统1和拆分后的分区由于是相邻的分区实行合并和拆分会根据原本的分区的值新的分区也会在本来的分区的逐一个人置。

四.刨除分区

ALTER TABLE tblist DROP PARTITION e;

留意:删除分区同时会将分区中的数据删除,同时枚举的list值也被去除,前面不可能往表中插入该值的多寡。

三、其余分区

1.对时间字段实行分区

CREATE TABLE listdate (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST( YEAR(hired) ) 
(
    PARTITION a VALUES IN (1990),
    PARTITION b VALUES IN (1991),
    PARTITION c VALUES IN (1992),
    PARTITION d VALUES IN (1993)
);

ALTER TABLE listdate ADD INDEX ix_hired(hired);

INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00');

EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

997755.com澳门葡京 6

 LIST分区也支撑对非整形的时刻项目字段的转变分区。

四、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

MySQL 子分区。专注:使用remove移除分区是一味移除分区的概念,并不会删除数据和drop
PARTITION分歧样,后者会连同数据一同删除

 

 

参考: 

RANGE分区:

COLUMN分区:

HASH分区:

KEY分区:

子分区:

钦点各分区路线:

分区索引:

分区介绍总括:

MySQL LIST分区,mysqllist分区

壹、创设子分区

子分区由三种创制方法,一种是不定义每种子分区子分区的名字和路线由分区决定,贰是概念每一种子分区的分区名和分级的路径

1.不定义种种子分区

CREATE TABLE tb_sub (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        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';

997755.com澳门葡京 7

二.概念每种子分区

定义子分区可以为各种子分区定义具体的分区名和分区路线

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
        )
    );

997755.com澳门葡京 8

三.测试数据

INSERT INTO tb_sub_ev() VALUES(1,'1989-01-01'),(2,'1989-03-19'),(3,'1989-04-19');

当往里面插入3条记下时,个中‘一九8陆-0一-0壹’和‘1987-04-1九’存款和储蓄在p0_s0分区中,‘1989-03-19’存储在p0_s1当中

997755.com澳门葡京 9

997755.com澳门葡京 10

介绍

子分区其实是对每一个分区表的各样分区实行重复分隔,近期唯有RANGE和LIST分区的表能够再拓展子分区,子分区只好是HASH大概KEY分区。子分区能够将本来的数目开始展览重新的分区划分。

 

 

总结

 重新定义LIST分区时不得不重新定义相邻的分区,不可能跳过分区定义,重新定义的分区列表枚举必须带有原分区的列表枚举,要是丢失有个别包蕴记录的枚举值那么数量也将被剔除;重新定义分区不可能更改分区的花色。

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

介绍

LIST分区和RANGE分区卓殊的一般,首要差距在于LIST是枚举值列表的会晤,RANGE是一连的区间值的晤面。2者在语法方面丰盛的貌似。同样提议LIST分区列是非null列,不然插入null值即使枚举列表里面不设有null值会插入失利,那一点和其余的分区不等同,RANGE分区会将其看做最小分区值存储,HASH\KEY分为会将其改变来0存款和储蓄,首要LIST分区只帮助整形,非整形字段须要经过函数调换到整形;5.伍版本之后可以不必要函数转变使用LIST
COLUMN分区协理非整形字段,在COLUMN分区中有详实的执教。

 

1、创制分区

List各样分区枚举的值只要求不1致就能够,未有定点的逐一。

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);

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='tblist';

997755.com澳门葡京 11

 一.插入数据

insert into tblist(id,store_id) values(1,1),(7,7); 

往a、b八个分区中各插入一条记下

997755.com澳门葡京 12

997755.com澳门葡京 ,二.插入不在列表中的值

997755.com澳门葡京 13 

当往分区中插入不在枚举列表中的值是会插入失败,插入null值即便null值不在枚举列表中也如出壹辙失利

贰、分区管制

一.日增分区

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

留神:不能充实包罗现存任意值的分区。

二.统1分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

将分区a,b合并为分区m

小心:同RANGE分区同样,只好合并相邻的多少个分区,无法跨分区合并。例如不可能合并a,c五个分区,只好通过合并a,b,c

997755.com澳门葡京 14

叁.拆分分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

ALTER TABLE tblist REORGANIZE PARTITION  n INTO 
    ( PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (3,9,10));

997755.com澳门葡京 15

通过两轮的拆分,枚举列表(三,玖,10)排到了(二,7,八)的眼下去了;其实是如此的,一起先联合abc成nm四个分区由于n中的枚举值小于m所以n在m的前边,前边再拆分n分区由于n分区在m分区的前头所以拆分出去的分区也是排在m分区的前方,由于a分区的值稍差于b分区的值所以a排在b的先头。

留意:1.在伍.柒.1贰版本中测试发现,合并和拆分分区重新定义的枚举值可以不是原先的值,假诺原本的枚举值包涵了数量而新合并或拆分的分区枚举值又不不带有原来的枚举值会促成数据丢失。即便不掌握为何mysql不会禁止该行为,可是人为的渴求无论是合并大概拆分分区枚举值保持不变,大概只可以扩展不能够减小,这样能保障数据不丢掉。

二.合并和拆分后的分区由于是隔壁的分区实行联合和拆分会依照原本的分区的值新的分区也会在本来的分区的次第地方。

肆.删减分区

ALTER TABLE tblist DROP PARTITION e;

瞩目:删除分区同时会将分区中的数据删除,同时枚举的list值也被删去,前面不恐怕往表中插入该值的数量。

三、其它分区

一.对时间字段实行分区

CREATE TABLE listdate (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST( YEAR(hired) ) 
(
    PARTITION a VALUES IN (1990),
    PARTITION b VALUES IN (1991),
    PARTITION c VALUES IN (1992),
    PARTITION d VALUES IN (1993)
);

ALTER TABLE listdate ADD INDEX ix_hired(hired);

INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00');

EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

997755.com澳门葡京 16

 LIST分区也支持对非整形的小运档次字段的转移分区。

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

小心:使用remove移除分区是唯有移除分区的定义,并不会去除数据和drop
PARTITION差别等,后者会连同数据一齐删除

 

 

参考: 

RANGE分区:

COLUMN分区:

HASH分区:

KEY分区:

子分区:

点名各分区路线:

分区索引:

分区介绍总计:

贰、分区管制

分区管制和RANGE、LIST的分区管制是平等的

一.合并分区

将p0,p一五个分区合并

ALTER TABLE tb_sub_ev REORGANIZE PARTITION p0,p1 INTO (
    PARTITION m1 VALUES LESS THAN (2000)
    ( SUBPARTITION n0,
      SUBPARTITION n1
     ) 

);

997755.com澳门葡京 17

专注:合并分区的子分区也务必是三个,那一点须要知道,因为必须和开创分区时各种分区唯有多少个子分区保持一致,合并分区不会招致数据的不见。

二.拆分分区

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
        )

);

同等,拆分分区也不可能不保险每一种分区是多少个子分区。

三.去除分区

ALTER TABLE  tb_sub_ev DROP PARTITION P0;

留神:由于分区是RANGE和LIST分区,所以删除分区也是同RANGE和LIST分区等同,那里不得不对各样分区进行删除,无法针对每一种子分区实行删减操作,删除分区后子分区连同数据1并被删除。

壹、创造子分区

子分区由三种成立方法,一种是不定义每种子分区子分区的名字和渠道由分区决定,贰是概念各样子分区的分区名和各自的路子

一.不定义每一个子分区

CREATE TABLE tb_sub (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        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';

997755.com澳门葡京 18

贰.定义各种子分区

定义子分区可认为种种子分区定义具体的分区名和分区路径

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
        )
    );

997755.com澳门葡京 19

三.测试数据

INSERT INTO tb_sub_ev() VALUES(1,'1989-01-01'),(2,'1989-03-19'),(3,'1989-04-19');

当往里面插入三条记下时,当中‘一9八七-0一-01’和‘壹九8九-0四-1玖’存款和储蓄在p0_s0分区中,‘1989-03-19’存储在p0_s1当中

997755.com澳门葡京 20

997755.com澳门葡京 21

总结

 重新定义LIST分区时只可以重复定义相邻的分区,不可能跳过分区定义,重新定义的分区列表枚举必须含有原分区的列表枚举,假设丢失有些包罗记录的枚举值那么数量也将被剔除;重新定义分区不能退换分区的花色。

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

LIST分区,mysqllist分区 介绍
LIST分区和RANGE分区相当的形似,主要分裂在于LIST是枚举值列表的集结,RANGE是连续的区间值的联谊。2者在…

三、错误的子分区创设

一.要不不定义种种子分区要不就各个都亟需定义

 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
        )
    );  

那边由于分区p壹未有定义子分区,所以创立分区战败

2、分区管制

分区管制和RANGE、LIST的分区管制是1模同样的

一.联合分区

将p0,p一八个分区合并

ALTER TABLE tb_sub_ev REORGANIZE PARTITION p0,p1 INTO (
    PARTITION m1 VALUES LESS THAN (2000)
    ( SUBPARTITION n0,
      SUBPARTITION n1
     ) 

);

997755.com澳门葡京 22

只顾:合并分区的子分区也亟须是三个,那一点必要精通,因为必须和创制分区时每一个分区唯有三个子分区保持壹致,合并分区不会形成数据的散失。

贰.拆分分区

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
        )

);

同1,拆分分区也务必保障每一种分区是五个子分区。

三.刨除分区

ALTER TABLE  tb_sub_ev DROP PARTITION P0;

瞩目:由于分区是RANGE和LIST分区,所以删除分区也是同RANGE和LIST分区1模同样,这里不得不对每种分区实行删减,不能针对各类子分区进行删除操作,删除分区后子分区连同数据一并被剔除。

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

专注:使用remove移除分区是壹味移除分区的概念,并不会删除数据和drop
PARTITION分歧,后者会连同数据一同删除

 

 

**分区数以万计作品: **

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

KEY分区:

钦定各分区路线:

分区建索引:

分区介绍计算:

3、错误的子分区创造

一.要不不定义种种子分区要不就各样都亟需定义

 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
        )
    );  

此间由于分区p壹未有定义子分区,所以成立分区退步

总结

 子分区的益处是能够对分区的数目进行再分,那样数据就更为的发散,同时还足以对各类子分区定义各自的囤积路线,那有的剧情在钦定各分区路线的下一篇文章中单独进行解说。

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

瞩目:使用remove移除分区是单纯移除分区的定义,并不会去除数据和drop
PARTITION不均等,后者会连同数据一齐删除

 

 

参考: 

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

KEY分区:

点名各分区路线:

分区建索引:

分区介绍计算:

总结

 子分区的好处是足以对分区的数目进行再分,那样数据就越发的分散,同时还足以对每种子分区定义各自的囤积路线,那部分内容在钦命各分区路线的下壹篇小说中独立开始展览教学。

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

子分区,mysql分区 介绍
子分区其实是对各类分区表的各类分区进行重复分隔,如今唯有RANGE和LIST分区的表能够再拓展子分区,子分区只…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website