插入非常大的数据块

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

我的数据库中有一个表需要拆分为两个表。该表有 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 的记录。有什么方法可以使这个过程更快?

谢谢

sql-server tsql bigdata sql-insert
© www.soinside.com 2019 - 2024. All rights reserved.