在线上有一张表很大,积累了几年的消费数据,现在需求把这张表几年前的数据给清掉,数据量将近1亿,直接按年份将其间的数据delete,你会发现删了几小时都没有回来。这是由于每执行一次delete,需求一起将该行的删去操作记载作为业务记载在日志中保存以便进行回滚。A8站源码交易平台
终究选用的计划是:
(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操作时隐式提交,不能回滚,也就不记载在日志文件中。