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