- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有一个包含数百万条记录的父表和三个外键指向父表主键的子表。像这样:
Parent
parent_id (PK) \ Child1
| child1_id (PK)
|---- parent_id (FK)
|
| Child2
| child2_id (PK)
|---- parent_id (FK)
|
| Child3
| child3_id (PK)
|---- parent_id (FK)
从 Parent
中硬删除数十万条记录的最佳做法是什么?我想在以下条件下删除:DELETE FROM PARENT WHERE [STATUS] = 'DONE'
。有没有办法在删除发生时不锁定表?以便其他记录可以插入到所有这些表中?我能想到的选项:
CASCADE DELETE
。UPDATE parent SET [DELETED] = 1 WHERE [STATUS] = 'DONE'
,删除具有这些父 ID 的每个子项,然后硬删除父项和 promise 。[DELETED]
列添加到 Parent
表。SELECT parent_id FROM parent WHERE [STATUS] = 'DONE'
然后通过所有这些 ID 进行批量删除。 (这表现得非常糟糕,所以我要放弃它)。我正在使用 SQL Server 2014 和 spring jdbc。
最佳答案
我更喜欢使用TOP x批量删除
所以对于每个子表:
DELETE TOP 10000
FROM child1
FROM child 1 as c1
INNER join parent
On parent_Id = c1.parent_id
AND parent.[STATUS] = 'DONE'
为每个子表重复多个批处理。
您可以定期删除没有子项的父项记录。
DELETE TOP 10000
FROM parent
FROM parent as p
Left outer join child1 c1
On p.parent_Id = c1.parent_id
AND c1.child_id IS NULL
Left outer join child2 c2
On p.parent_Id = c2.parent_id
AND c2.child_id IS NULL
Left outer join child3 c3
On p.parent_Id = c3.parent_id
AND c3.child_id IS NULL
WHERE parent.[STATUS] = 'DONE'
每个父项有多少个子项将决定您运行父项删除的频率。你当然可以改变 X 我会测试小,然后增加说 50000
关于sql-server - 从 SQL Server 中的多个表中删除多条记录的最佳做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38539908/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!