場景:
在mysql上面刪除大量數據(千萬級),由於不是清空數據,故不能使用TRUNCATE 語句(有個TRUNCATE可參考:MySQL DELETE語句與TRUNCATE TABLE語句)
問題:
- 在正常DELETE下,刪除十分緩慢;
- 由於索引的原因,每次刪除都要相應的更新索引,越往後索引碎片越多,即越往後越慢
解決方案:
- 完整備份;
- 保存索引DDL,刪除索引,刪除速率與索引量成正比;保存索引DDL,刪除索引,刪除速率與索引量成正比;
- 關閉日誌記錄;
- 刪除後重建索引
TIP:
如果需要保留的數據比較少的話,可以把要保留的數據備份出來。DROP原表,重新創建,先不要急着創建索引、主鍵,把數據導回去,然後在建索引、約束之類的。