gpt4 book ai didi

sql - 在 SQL 中删除数百万条记录的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 01:17:59 25 4
gpt4 key购买 nike

我有一个以下的表结构

Table1       Table2        Table3
--------------------------------
sId sId sId
name x y
x1 x2 x3

我想删除表1中基于sId在表3中没有匹配记录的所有记录,如果表2中存在sId,则不要从表1中删除记录。表1中大约有20,15和1000万条记录,分别为表2和表3。--我曾经做过这样的事情

Delete Top (3000000)
From Table1 A
Left Join Table2 B
on A.Name ='XYZ' and
B.sId = A.sId
Left Join Table3 C
on A.Name = 'XYZ' and
C.sId = A.sId

((我已在 sId 上添加索引,但未在名称上添加索引。))但这需要很长时间才能删除记录。有没有更好的方法来删除数百万条记录?提前致谢。

最佳答案

如果您需要删除少于 40% 的数据,则以 5000 或 10000 为批量执行此操作,如果您需要更多数据,则转储要保留在另一个表/bcp 中的数据,截断此表并插入这些行你再次转储到另一个表/bcp in

while @@rowcount > 0
begin
Delete Top (5000)
From Table1 A
Left Join Table2 B
on A.Name ='XYZ' and
B.sId = A.sId
Left Join Table3 C
on A.Name = 'XYZ' and
C.sId = A.sId
end

您可以运行看看会发生什么的小示例

CREATE TABLE #test(id INT)

INSERT #test VALUES(1)
INSERT #test VALUES(1)
INSERT #test VALUES(1)
INSERT #test VALUES(1)
INSERT #test VALUES(1)
INSERT #test VALUES(1)
INSERT #test VALUES(1)

WHILE @@rowcount > 0
BEGIN
DELETE TOP (2) FROM #test

END

关于sql - 在 SQL 中删除数百万条记录的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com