需求背景

生产环境运维哥们说有几张表太大,历史数据太多,删除速度慢,delete数据不会释放磁盘空间,drop表在进行中时对数据库性能影响很大。所以对数据量大的表进行分区。

操作步骤:

原表结构:

记录一次mysql分区操作

1.主键的设置

根据记录的创建时间进行按月分表。前提是分区字段要为主键或者主键的一部分。所以首先删除表的原主键,重新设置联合主键

alter table erp_interface_order_log drop PRIMARY KEY;

alter table erp_interface_order_log add primary key(ID,REQ_DATE);

2.根据创建时间进行分区

记录一次mysql分区操作

这里month(REQ_DATE)返回的是当前日期的下个月,所以-1

3.找到mysql分区目录查看ibd文件创建成功。

进入/usr/local/mysql/data/ubc,ubc是当前数据库

记录一次mysql分区操作

4.测试数据

查看数据落分区的情况

记录一次mysql分区操作

删除6月数据

执行alter table erp_interface_order_log truncate partition p6;  

记录一次mysql分区操作

以后表数据量大了后,业务要保留近3个月数据,只要执行上面删除sql,指定3个月前的月份就可以瘦身了。

相关文章: