MySQL10亿+表数据进行批量删除操作

版权声明: https://blog.csdn.net/qq_35209838/article/details/85057270

因为开发人员上线的定时删除数据的程序没有执行,坑啊~ 导致了数据库表数据量达到10亿+。

开发人员的需求是只需保留一个月的数据即可,数据都是一些java日志。所以提了需求删除数据的数据库变更。

表数据统计如下:

因为该表的id为自增主键,也可以通过最大最小id进行行数的估算。

统计表大小,索引加数据文件一共600多G

本次的数据变更需求为删除11月17号之前的数据,即日志数据只需保留一个月即可。研发人员提供的SQL如下:即要删除6亿行数据,真的是一次大的变动。

delete from java_decision_detail_log where id < 694859879;

考虑到一次批量删除6亿数据是一个超大事务,执行完成后造成主从延迟。

索引考虑打散执行。

脚本如下,每次删除100万行数据,

这样删除在操作系统上看数据文件的大小没有减小反而增加,空间没有回收,如果想要回收需要进行重建或者alter语句就可以实现,这样按主键删除应该是把一个页上的数据都删掉,空间也许可以复用。

猜你喜欢

转载自blog.csdn.net/qq_35209838/article/details/85057270