我的数据库中有一个表需要拆分为两个表。该表有 100,050,000 条记录。我需要一个快速的方法来完成这个。
我试过这个:
DECLARE @from BIGINT = 0,
@step BIGINT = 1000000,
@currentSourceCountBIGINT = 0
SELECT @currentSourceCount = COUNT_BIG(1) FROM dbo.SourceTable
WHILE @from < @currentSourceCount
BEGIN
INSERT INTO dbo.DestinationTable WITH (TABLOCKX)(col1, col2, col3, col4)
SELECT t1.col1,
t1.col2,
t1.col3,
t1.col4
FROM (SELECT a.col1,
a.col2,
a.col3,
a.col4
FROM ( SELECT st.col1,
st.col2,
st.col3,
st.col4,
ROW_NUMBER() OVER (ORDER BY st.Id) AS RowNumber
FROM dbo.SourceTable st) a
) AS t1
WHERE t1.RowNumber BETWEEN @from AND @from + @step
SET @from += @step + 1
END
但即使是这个解决方案也太慢了。我填写了表的外键,只剩下主键,设置为IDENTITY。
在循环的每一遍中,我将不同的数据插入到两个新表中。有了这个数量的记录,它在大约 4 个小时的运行时间里做出了大约 1/3 的记录。有什么方法可以使这个过程更快?
谢谢