LIMIT 分批删除要点
- DELETE ... LIMIT n 每次只删前 n 行,降低锁粒度
- 分批循环能避免长事务,主库压力更平稳
- 每批后用同样 WHERE 再查,确认还剩多少待删
- 删前建议先 SELECT COUNT 估算总行数再定批大小
- 大表清空若无需保留自增,TRUNCATE 比循环删更快
- 删完检查索引统计,必要时 ANALYZE TABLE
LIMIT 分批删除示例
-- 每次删 1000 行,循环执行直到影响行数为 0
DELETE FROM log WHERE created_at BETWEEN '2000-01-01' AND '2022-12-31' LIMIT 1000;
避坑提醒:分批删除的批大小取 500~2000 较稳:太小循环次数多,太大又占锁;配合休眠还能给从库追赶留时间。