3.MySql进阶之使用分区

1.如何创建一个分区表

使用分区的好处不用多说了,懂得都懂。

1)如果想在创建表的时候创建分区我们可以如下写法:
下面以时间日期分区

CREATE TABLE test_partition(
id int(11) not null ,
tran_date date not null ,
amt decimal(17,2) not null ,
primary key(id,tran_date) //注意,如果想根据某个列分区,必须将此列加入主键中
)
partition by range(to_days(tran_date))(
partition p_20210928 values less than (to_days('2021-09-29')),
partition p_20210929 values less than (to_days('2021-09-30')),
partition p_max values less than maxvalue
);

下面看下20210928的查询计划:
在这里插入图片描述
可以看到分区起到作用了。

2)如果表已经存在了,我们可以通过下面的语句给表新建分区:

ALTER TABLE test_partition PARTITION by range(to_days(tran_date))(
partition p_20210928 values less than (to_days('2021-09-29')),
partition p_20210929 values less than (to_days('2021-09-30')),
partition p_20210930 values less than (to_days('2021-10-01')),
partition p_max values less than maxvalue
 );

查看对9月30号的查询计划,可以看到成功创建分区了
在这里插入图片描述

2.关于mysql的分区使用注意点

1)首先mysql不支持删除一个分区后重新创建该分区(除非该分区是最大分区)
以下面的表为例:

CREATE TABLE test_partition(
id int(11) not null ,
tran_date date not null ,
amt decimal(17,2) not null ,
primary key(id,tran_date) //注意,如果想根据某个列分区,必须将此列加入主键中
)
partition by range(to_days(tran_date))(
partition p_20210928 values less than (to_days('2021-09-29')),
partition p_20210929 values less than (to_days('2021-09-30')),
partition p_max values less than maxvalue
);

首先我们删除分区p_20210929 :

 alter table test_partition drop partition p_20210929;

然后查看该表的分区:
在这里插入图片描述
可以看到分区p_20210929已经被删除了,下面我们向表中重新添加这个分区,看看可以不可以:

 alter table test_partition add partition(
 partition p_20210929 values less than (to_days('2021-09-30'))
 )

在这里插入图片描述
答案是不可以的。

下面我们删除最大分区后添加看看可不可以:

alter table test_partition drop partition p_max;

在这里插入图片描述
删除成功!!
下面进行添加:

 alter table test_partition add partition(
 partition p_max values less than maxvalue
 )

在这里插入图片描述
可以看到,添加成功!!

3.如何在不使用DELETE的情况下删除某分区的所有数据?

只需执行下面语句:

ALTER TABLE table_name TRUNCATE partition p0;

注意:这条语句并不会删除原有分区,所以,如果想要清空某分区数据而有不想删除这个分区,可以使用这条语句。

Guess you like

Origin blog.csdn.net/c1776167012/article/details/120547911