不能直接DELETE全表,因会引发长锁、日志爆满、同步延迟、事务失败及索引分裂;应分批按主键范围删除,如WHERE id > 100000 AND id

直接用DELETE FROM table删几百万行?风险高、锁表久、日志爆满、业务卡死——这不是删除,是“自毁式操作”。安全高效删大量数据,核心就三点:分批删、避全表锁、控事务大小。
为什么不能直接 DELETE 全表?
MySQL/PostgreSQL 中,单条 DELETE 若影响行数过多,会:
• 持有长时间行锁或表级锁,阻塞读写
• 生成巨量 undo/redo 日志,拖慢主从同步甚至填满磁盘
• 触发自动提交失败或超时中断,留下不一致状态
• 在 InnoDB 中还可能引发索引分裂、缓冲池压力飙升
推荐方案:分批次 + 主键范围删除
以 MySQL 为例,假设要删 orders 表中 created_at 的旧数据(共 500 万行):
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~