删除SQL Server上的大量数据

问题描述 投票:0回答:1

我需要在SQL Server中删除90000.00亿条记录。

我想知道最好的方法。

我做了以下选择。

DeleteTable: 
   DELETE TOP(1000)  TAB1 
   FROM TABLE1 TAB1 
     LEFT JOIN TABLE2 TAB2 ON TAB1.ID_PRODUCT = AB2.ID_PRODUCT 
   WHERE TAB2.ID_PRODUCT IS NULL; 
   IF @@ROWCOUNT <> 0 goto DeleteTable; 

我想知道是否可以优化此查询以获得更好的删除性能

谢谢。

sql-server tsql sql-delete
1个回答
0
投票

此评论太长了。

删除900,000,000行将花费很长时间,并且您可能会用完临时存储空间-除非您有很多存储空间。您采用一种方法递增删除行的方法。

如果您的日志记录未设置为“简单”,则可能需要考虑这一点。使用增量删除方法,至少可以防止日志填满。

对于您的查询,您希望tab2(id_product)具有索引。我不确定tab1(id_product)上的索引是否真的有帮助。

另一种方法是重新创建表,因为insert和表创建效率更高。

为此,您基本上可以这样做:

select t1.*
into temp_tab1
from tab1 t1 
where exists (select 1 from table2 t2 where t2.id_product = t1.id_product);

truncate table tab1;  -- back it up first!

insert into tab1
    select *
    from temp_tab1;

注意:如果您有一个身份列,则可能要启用身份插入。另外,如果您有此表的外键约束,则需要格外小心。最后,如果需要重复执行此操作,则应考虑对表进行分区。删除分区比删除行要高效得多。

© www.soinside.com 2019 - 2024. All rights reserved.