需求背景
生产环境运维哥们说有几张表太大,历史数据太多,删除速度慢,delete数据不会释放磁盘空间,drop表在进行中时对数据库性能影响很大。所以对数据量大的表进行分区。
操作步骤:
原表结构:
1.主键的设置
根据记录的创建时间进行按月分表。前提是分区字段要为主键或者主键的一部分。所以首先删除表的原主键,重新设置联合主键
alter table erp_interface_order_log drop PRIMARY KEY;
alter table erp_interface_order_log add primary key(ID,REQ_DATE);
2.根据创建时间进行分区
这里month(REQ_DATE)返回的是当前日期的下个月,所以-1
3.找到mysql分区目录查看ibd文件创建成功。
进入/usr/local/mysql/data/ubc,ubc是当前数据库
4.测试数据
查看数据落分区的情况
删除6月数据
执行alter table erp_interface_order_log truncate partition p6;
以后表数据量大了后,业务要保留近3个月数据,只要执行上面删除sql,指定3个月前的月份就可以瘦身了。