某天,在生产环节中,发现一个定时任务表,由于每次服务区查询这个表就会造成慢查询,给mysql服务器带来不少压力,经过分析,该表中绝对部分数据是垃圾数据
需要删除,约1050万行,由于缺乏处理大数据的额经验,开始直接使用delete搭配where条件进行清理,最后执行了1个小时也没有完成,后来经过跟查询,1000万条数据
的删除需要几十个小时甚至上百小时,果断放弃,采用了迂回策略。
三步骤策略:
1、抽取需要保留的数据到备份表中
2、truncate旧表
3、备份的数据插入回来
通过以上思路果断在10分钟内解决了,收获就是千万级数据删除delete是不可取的。
补充注详细步骤:
0、建立备份表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;
1、提取旧表需要保留的数据 INSERT INTO 新表 SELECT * FROM 旧表 WHERE 查询条件;
2、禁用外键为初始化旧表做准备SET foreign_key_checks = 0;(如果旧表中有外键,最好禁用下,否则truncate会提示,)
3、初始化旧表 TRUNCATE TABLE 旧表;
4、提取出来的数据恢复到旧表INSERT INTO 旧表 SELECT * FROM 新表;
5、开启外键SET foreign_key_checks = 1;
1、提取旧表需要保留的数据 INSERT INTO 新表 SELECT * FROM 旧表 WHERE 查询条件;
2、禁用外键为初始化旧表做准备SET foreign_key_checks = 0;(如果旧表中有外键,最好禁用下,否则truncate会提示,)
3、初始化旧表 TRUNCATE TABLE 旧表;
4、提取出来的数据恢复到旧表INSERT INTO 旧表 SELECT * FROM 新表;
5、开启外键SET foreign_key_checks = 1;
其他注意事项:
1、操作大数据的过程中最好关闭mysql的日期记录和慢日志查询。