我需要将数据从一个表插入到另一个循环中,每次循环运行 10k 行。
我想尝试一下,因为我insert into ***() select () from ###
需要花费大量时间,因为源表有数百万条记录。
使用这种方法会不会对性能有任何改进?
我需要将数据从一个表插入到另一个循环中,每次循环运行 10k 行。
我想尝试一下,因为我insert into ***() select () from ###
需要花费大量时间,因为源表有数百万条记录。
使用这种方法会不会对性能有任何改进?
可以尝试分批插入,看看有没有性能提升。这是示例代码:
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 是批量大小,您可以根据自己的方便更改此值。