Mysql的分区partition关于reorganize演示

我们一般业务用于展示层喜欢用mysql存储,这不可避免我们需要建立mysql分区表。
建表:
DROP TABLE IF EXISTS people;
CREATE TABLE IF NOT EXISTS people (
name varchar(20) DEFAULT NULL,
address varchar(30) DEFAULT NULL,
id int(11) NOT NULL AUTO_INCREMENT,
pt_d int(11) NOT NULL,
PRIMARY KEY (id,pt_d)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
特别注意,如果我们使用range进行分区不可将分区字段设置成 varchar(8)类型,这样我们执行分区语句会报错 ERROR 1659 (HY000): Field ‘pt_d’ is of a not allowed type for this type of partitioning
基于上面我们只需要把分区字段改成 int类型即可。
执行建立分区语句如下:
alter table people PARTITION by RANGE(pt_d)(PARTITION 20200101 VALUES less than (20200102),PARTITION 20200102 VALUES less than MAXVALUE);
建完分区后我们可以通过如下语句查看一下。
SELECT
PARTITION_NAME part,
PARTITION_EXPRESSION expr,
PARTITION_DESCRIPTION descr,
TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME = ‘people’;
结果如图:
在这里插入图片描述
这时我们可以看到已经有了俩个分区了。
一般我们俩个分区肯定不够这时我们需要增加分区:
不能用add partition 而是用如下语句
alter table people REORGANIZE PARTITION 20200102 INTO (PARTITION 20200102 VALUES less than (20200103),PARTITION 20200103 VALUES less than MAXVALUE);
结果如下图:
在这里插入图片描述
直接使用报错
在这里插入图片描述
如果故意使用语句 alter table people REORGANIZE PARTITION 20200103 INTO (PARTITION 20200103 VALUES less than (20200104),PARTITION 20200105 VALUES less than MAXVALUE);
造成我们的分区不连续如图:
在这里插入图片描述
此时很明显我们的20200104分区不存在,我们如何将这个分区添加进去呢??
这时我们需要且只能使用 reorganize才能达到效果
alter table people REORGANIZE PARTITION 20200105 INTO (PARTITION 20200104 VALUES less than (20200105),PARTITION 20200105 VALUES less than MAXVALUE);

在这里插入图片描述
这时就可以看到我们的分区就连续了

如果我们需要补一个20191231的分区怎么办呢?
继续往下看,执行如下命令
alter table people REORGANIZE PARTITION 20200101,20200102,20200103,20200104,20200105 INTO (
PARTITION 20191231 VALUES less than (20200101),
PARTITION 20200101 VALUES less than (20200102),
PARTITION 20200102 VALUES less than (20200103),
PARTITION 20200103 VALUES less than (20200104),
PARTITION 20200104 VALUES less than (20200105),
PARTITION 20200105 VALUES less than MAXVALUE);
在这里插入图片描述
如果不连续的分区是多段我们又如何呢?采用下面语句造成不连续现象alter table people REORGANIZE PARTITION 20200105 INTO (PARTITION 20200105 VALUES less than (20200106),PARTITION 20200108 VALUES less than MAXVALUE);
在这里插入图片描述
很明显20200106和20200107分区不存在;
使用如下语句补齐这俩个分区即可:
alter table people REORGANIZE PARTITION 20200108 INTO (PARTITION 20200106 VALUES less than (20200107),PARTITION 20200107 VALUES less than (20200108),
PARTITION 20200108 VALUES less than MAXVALUE);
在这里插入图片描述
插入数据验证一下INSERT INTO people ( name, address,pt_d ) VALUES( ‘zs’, ‘anhui’,‘20200101’),( ‘lisi’, ‘jiangsu’,‘20200102’),( ‘ww’, ‘zhejiang’,‘20200103’),( ‘zhaoliu’, ‘anhui’,‘20200104’),( ‘xiaojinjin’, ‘jiangsu’,‘20200105’);

在这里插入图片描述
可以看到对应的分区里各有了记录条数。
清空分区数据:
ALTER TABLE people TRUNCATE PARTITION 20200103,20200103;
清空全部分区数据:
alter table people truncate partition all;
删除分区 alter table people drop partition 20200105;

查看mysql进程 show processlist;

猜你喜欢

转载自blog.csdn.net/zwmonk/article/details/105800379
今日推荐