Mysql 批量删除数据有啥好的方案?

2022-06-22 17:10:18 +08:00
 Red998

1.写代码删、需要一批批的删除。要考虑事务长、超时问题。 2.写脚本删、怕锁表。造成阻塞 大佬们、你们删除批量数据怎么删除?

1786 次点击
所在节点    程序员
11 条回复
seanzxx
2022-06-22 17:17:04 +08:00
数量少的话 delete limit 呀,在负载低的时候删,数量多就建分区呀,改动大一点
aitaii
2022-06-22 17:23:07 +08:00
如果业务能中断 1 秒的话,创建一个表 A_1,rename 表,A->A_COPY, A_1->A A_COPY 删完数据拷贝到 A 表
ch2
2022-06-22 17:26:59 +08:00
update set is_deleted=true
binge921
2022-06-22 17:32:53 +08:00
drop taba
toyassb
2022-06-22 17:41:12 +08:00
rm datadir
wtfedc
2022-06-22 17:43:35 +08:00
删除数据的时候,只是把数据标记成了 delete ,并没有节省物理空间。可以插入一条的时候,删多条
lexin132
2022-06-22 17:46:16 +08:00
把要删除的数据 id 保存到 redis 或者文件里,然后另外起个脚本读取 id 再按需删除?
删除数据的场景下应该不会特别大量吧。。
sunhuawei
2022-06-22 18:16:46 +08:00
根据主键删;脚本设置好间隔时间能避免阻塞;如果是大量 sql 可以手动开启事务,手动提交,避免自动开启事务消耗大量时间;删除后记得重建索引
cheng6563
2022-06-22 18:39:15 +08:00
while(true){
int updateRows = executeUpdate("delete ... limit 100");
if(updateRows == 0 ) break;
Thread.sleep(200);
}
wineast
2022-06-23 10:30:35 +08:00
先把要删除的数据 select 出来,然后按照 where id=xxx and 过滤条件 双重保证来删除把,这样的脚本也符合安全审计的要求
ramdava
2022-06-23 11:52:13 +08:00
#3 楼正解
话说,有什么业务场景需要批量删数据的?
有什么业务场景是逻辑删除不可以解决的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX