MySQL 子分区

数据库 11
数据库

介绍

子分区其实是对每个分区表的种种分区举行再一次分隔,近年来唯有RANGE和LIST分区的表能够再打开子分区,子分区只好是HASH可能KEY分区。子分区能够将原先的数据开始展览双重的分区划分。

 

 

MySQL 子分区,mysql分区

介绍

LIST分区和RANGE分区万分的貌似,主要差异在于LIST是枚举值列表的集聚,RANGE是连连的区间值的集聚。二者在语法方面13分的相似。同样提出LIST分区列是非null列,不然插入null值假如枚举列表里面不存在null值会插入失利,这一点和其它的分区不均等,RANGE分区会将其视作最小分区值存储,HASH\KEY分为会将其转移成0存储,首要LIST分区只辅助整形,非整形字段必要经过函数调换来整形;五.五本子之后方可没有供给函数调换使用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';

数据库 1

 一.插入数据

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

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

数据库 2

二.插入不在列表中的值

数据库 3 

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

二、分区管制

1.日增分区

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

数据库 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));

数据库 5

透过两轮的拆分,枚举列表(三,九,10)排到了(贰,七,八)的前方去了;其实是这么的,壹开始统1abc成nm多个分区由于n中的枚举值小于m所以n在m的眼下,后边再拆分n分区出于n分区在m分区的前边所以拆分出去的分区也是排在m分区的前面,由于a分区的值稍低于b分区的值所以a排在b的前头。

注意:壹.在5.7.12本子中测试开掘,合并和拆分分区重新定义的枚举值能够不是原本的值,如若原先的枚举值包蕴了数据而新合并或拆分的分区枚举值又不不包蕴原来的枚举值会招致数据丢失。固然不知底干什么mysql不会禁止该表现,不过人为的供给无论是合并也许拆分分区枚举值保持不改变,可能只好扩大不可能压缩,那样能保障数据不丢掉。

2.联结和拆分后的分区由于是相邻的分区举行联合和拆分会依照原本的分区的值新的分区也会在本来的分区的依次地方。

肆.删减分区

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

数据库 6

 LIST分区也帮助对非整形的日子等级次序字段的转移分区。

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

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

 

 

参考: 

RANGE分区:

COLUMN分区:

HASH分区:

KEY分区:

子分区:

点名各分区路线:

分区索引:

分区介绍总计:

一、创设子分区

子分区由二种创制方法,一种是不定义每种子分区子分区的名字和渠道由分区决定,二是概念各类子分区的分区名和分级的门路

壹.不定义每一种子分区

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

数据库 7

2.概念每一种子分区

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

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

数据库 8

叁.测试数据

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

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

数据库 9

数据库 10

介绍

子分区其实是对每一种分区表的每种分区进行重新分隔,近年来只有RANGE和LIST分区的表能够再拓展子分区,子分区只能是HASH只怕KEY分区。子分区能够将原先的数目进行再一次的分区划分。

 

 

总结

 重新定义LIST分区时只好重复定义相邻的分区,不能够跳过分区定义,重新定义的分区列表枚举必须包蕴原分区的列表枚举,假设丢失有个别包括记录的枚举值那么数量也将被剔除;重新定义分区无法退换分区的类别。

 

 

 

备注:

    作者:pursuer.chen

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

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

《欢迎交流讨论》

贰、分区管制

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

一.合并分区

将p0,p1多个分区合并

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

);

数据库 11

专注:合并分区的子分区也必须是多个,那一点要求明白,因为必须和开创分区时每一种分区只有五个子分区保持壹致,合并分区不会招致数据的不见。

二.拆分分区

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、创立子分区

子分区由二种创立方法,壹种是不定义每种子分区子分区的名字和路线由分区决定,2是概念每种子分区的分区名和分级的门路

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

数据库 12

贰.定义每种子分区

定义子分区可感到每一种子分区定义具体的分区名和分区路线

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

数据库 13

三.测试数据

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

当往里面插入叁条记下时,在那之中‘1九九零-01-0一’和‘一九八玖-0四-1玖’存储在p0_s0分区中,‘1989-03-19’存储在p0_s1当中

数据库 14

数据库 15

三、错误的子分区创制

1.要不不定义种种子分区要不就每一种都亟待定义

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

此地由于分区p1未有定义子分区,所以创立分区失利

二、分区管制

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

一.联结分区

将p0,p一多个分区合并

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

);

数据库 16

在意:合并分区的子分区也必须是七个,这一点必要通晓,因为必须和创设分区时每一个分区唯有多个子分区保持1致,合并分区不会招致数据的丢失。

贰.拆分分区

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分区等同,这里不得不对每种分区进行删除,不能够针对各种子分区举办删减操作,删除分区后子分区连同数据一并被删除。

肆、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

留意:使用remove移除分区是可是移除分区的定义,并不会删除数据和drop
PARTITION不壹致,后者会连同数据一同删除

 

 

**分区为数众多小说: **

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

KEY分区:

钦定各分区路线:

分区建索引:

分区介绍计算:

三、错误的子分区创造

1.要不不定义各种子分区要不就每一种都亟待定义

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

这里由于分区p1未有定义子分区,所以创设分区失利

总结

 子分区的利润是足以对分区的数码开始展览再分,那样数据就尤其的疏散,同时还是能对每一种子分区定义各自的仓库储存路线,那有的内容在钦赐各分区路线的下一篇文章中独立开始展览教学。

 

 

备注:

    作者:pursuer.chen

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

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

《欢迎交流讨论》

四、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

注意:使用remove移除分区是但是移除分区的概念,并不会删除数据和drop
PARTITION分裂样,后者会连同数据一同删除

 

 

参考: 

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

KEY分区:

内定各分区路线:

分区建索引:

分区介绍总括:

数据库,总结

 子分区的利润是足以对分区的数额开始展览再分,这样数据就进一步的粗放,同时仍可以够对每一种子分区定义各自的存款和储蓄路线,那部分内容在钦命各分区路径的下一篇文章中独立开始展览教学。

 

 

备注:

    作者:pursuer.chen

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

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

《欢迎交流讨论》

子分区,mysql分区 介绍
子分区其实是对各种分区表的各样分区进行双重分隔,近期只有RANGE和LIST分区的表能够再实行子分区,子分区只…

发表评论

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

网站地图xml地图