在线上有一张表很大,积累了几年的消费数据,现在需要把这张表几年前的数据给清掉,数据量将近1亿,直接按年份将其中的数据delete,你会发现删了几小时都没有返回。这是因为每执行一次delete,需要同时将该行的删除操作记录作为事务记录在日志中保存以便进行回滚。
? ?最终采用的方案是:
? ? (1)抽取需要保留的数据到备份表中,
? ? (2)truncate旧表
? ? (3)备份表中的数据再插入truncate表
我的执行实操如下:
CREATE TABLE charging_record_old SELECT * FROM charging_record WHERE 1=2;
INSERT INTO charging_record_old SELECT * FROM charging_record cr WHERE cr.recordtime > "2019-01-01 00:01:00";
TRUNCATE TABLE charging_record;
SET foreign_key_checks = 0;
INSERT INTO charging_record SELECT * FROM charging_record_old;
实际只用了十几分钟
这边说一下truncate操作:truncate操作时隐式提交,不能回滚,也就不记录在日志文件中。
原文地址:https://blog.51cto.com/14471175/2433741
时间: 2024-10-03 09:08:21