SQL Server:在单个事务中处理大量数据

时间:2012-05-11 04:53:04

标签: sql sql-server transaction-log

我在SQL Server上有一个非常庞大的表,行数约为10亿,我们需要使用如此简单的代码将数据从这个表迁移到另一个表:

SET XACT_ABORT ON
BEGIN TRAN

INSERT INTO TargetTable
SELECT Col1, Col2, ... ColN 
FROM 
    HugeTable ht 
    INNER JOIN AnotherHugeTable aht ON aht.ID = ht.ColN
WHERE ColX IS NOT NULL

COMMIT TRAN

是否可以在单笔交易中完成?在这种情况下你会怎么做呢?

1 个答案:

答案 0 :(得分:4)

这取决于您运行它的情况和业务要求。

请记住,您的事务日志可能会变得很大......(您多久备份一次TLog?)

如果可能的话,分成10,000个(或100,000个)批次。

如果你有数十亿行的表,你应该调查表分区(需要企业版的SQL Server)。