近期有一张表,存量有3000多万数据,每天还在以40万左右增长。业务上准备只保留两个月的数据。准备删除。
这个量直接删除,可能会导致锁表。
要么写个存储过程,循环,每次删除1000条,sleep下。当然这个方法很不错。但delete是DML语言,删除只是把状态标记为删除,并没有删除数据文件,也就是空间索引并没有释放。依然解决不了数据量大对业务带来慢的困惑。那么如何释放空间和索引呢?
mysql提供了OPTIMIZE,对大量delete数据后的表进行优化,释放空间和索引。注意:OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用。
其实还有一个不错的办法:按月创建分区。 对要删除的数据,按分区,drop,彻底delete