• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL交换分区使用

MySQL 彭东稳 8年前 (2016-05-26) 24803次浏览 已收录 0个评论

MySQL 5.6开始支持ALTER TABLE … EXCHANGE PARTITION语句。该语句允许分区或子分区中的数据与另一个非分区的表中的数据进行交换。如果非分区表中的数据为空,那么相当于将分区中的数据移动到非分区表中。若分区表中的数据为空,则相当于将外部表中的数据导入到分区中。

要使用ALTER TABLE … EXCHANGE PARTITION语句,必须满足下面的条件:

1)要交换的表需和分区表有着相同的表结构,但是表不能含有分区;

2)在非分区表中的数据必须在交换的分区定义内;

3)被交换的表中不能含有外键,或者其他的表含有对该表的外键引用;

4)用户除了需要alter、insert和create权限外,还需要drop的权限。

此外,有两个小的细节需要注意:

1)使用该语句时,不会触发交换表和被交换表上的触发器;

2)auto_increment列将被重置;

接着来测试几个例子。

一、分区数据交换到表中

首先创建含有range分区的表e,并填充相应的数据:

然后创建交换表e2,表e2的结构和表e一样,但需要注意的是表e2不能含有分区。

观察一下分区表中的数据。

因为表e2中的没有数据,使用如下语句将表e的分区p0中的数据移动到表e2中。

这时再观察表e中分区的数据,可以发现p0中的数据已经没有了。

而这时可以在表e2中观察到被移动的数据。

二、分区数据跟表中数据交换

往e表再插入一条数据,写入到p0分区中。

然后测试把p0分区的数据跟e2表数据交换。

可以看到,p0分区跟e2表进行了数据的交换。

PS:分区交换我在实践中一般都是用来归档历史数据使用,生产中本人一个分区5千万数据几秒钟就交换走了,可以说是用着非常爽的。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!