方案一(推荐★★★★★):新建表 + 导入最近1个月数据(最快释放空间)
这是互联网公司最常用的方法。
例如:
创建一个和 table1 结构完全相同的新表 table1_new,但不复制任何数据。
CREATE TABLE table1_new LIKE table1;
导入最近一个月:
INSERT INTO table1_new
SELECT *
FROM table1
WHERE create_at >= NOW() - INTERVAL 1 MONTH;
确认数据:
SELECT COUNT(*) FROM table1;
SELECT COUNT(*) FROM table1_new;
然后
RENAME TABLE
table1 TO table1_old,
table1_new TO table1;
观察几天没问题:
DROP TABLE table1_old;
立即释放50GB左右空间。
优点
✅ 不会产生大量undo
✅ 不会锁很久(只有rename瞬间)
✅ DROP TABLE秒完成
✅ 空间立即释放
这是MySQL官方都推荐的大表清理方式。