下面的是实现方法:
-
Select the rows not to be deleted into an empty table that has the same structure as the original table:
INSERT INTO t_copy SELECT * FROM t WHERE ... ; //把要删除大量数据的表中不需要删除的数据转存到另外一张表中太多需要分批插入: 插入数据(几百万的数据量一定要分批插入,一次30万-40万为最佳,毕竟mysql的数据处理能力有限)按日期查询后插入(每天大概会产生30多万数据量,所以采用日期插入)例如:
INSERT INTO cc SELECT * FROM orbit WHERE xttime > '2018-04-16 00:00:00' AND xttime<='2018-04-17 00:00:00';
-
Use RENAME TABLE to atomically move the original table out of the way and rename the copy to the original name:
RENAME TABLE t TO t_old, t_copy TO t;//同时重明明两张表,间接实现数据删除操作
-
Drop the original table:
DROP TABLE t_old; //视情况而定吧,我清理数据是因为业务慢了,但是既然转存之后不会影响业务也就没删除转存出来的数据。
整个清理数据的过程我用了大概一分钟左右,如果delete的话。。。你懂的