1

我需要将数据从一个表插入到另一个循环中,每次循环运行 10k 行。

我想尝试一下,因为我insert into ***() select () from ###需要花费大量时间,因为源表有数百万条记录。

使用这种方法会不会对性能有任何改进?

4

1 回答 1

4

可以尝试分批插入,看看有没有性能提升。这是示例代码:

DECLARE @Count INT
DECLARE @Start INT

SET @Start = 1
SELECT @Count = COUNT(*) FROM TableName1

WHILE @Start<=@Count
BEGIN
    WITH cte
    AS
    (
        SELECT Col1, Col2, Col3,ROW_NUMBER() OVER (ORDER BY Col1) AS 'RowNum' FROM TableName1
    )

    INSERT INTO TableName2 SELECT Col1, Col2, Col3 FROM cte WHERE RowNum >= @Start AND RowNum < @Start+10000

    SET @Start += 10000

    WAITFOR DELAY '00:00:10'
END

这里 10000 是批量大小,您可以根据自己的方便更改此值。

于 2013-08-06T14:22:22.077 回答