有一个具有以下设置和要求的新项目:-
我的客户在他们的办公室有一台 MSSQL 2005 服务器 (A)。他们的供应商在世界的另一个地方有一个 MSSQL 2005 服务器 (B),其中包含实时事务数据。我的客户希望在非办公时间每天将数据从 (B) 加载到 (A)。他们可以访问(B)的数据读取器,但仅此而已,供应商将不会进行复制、日志传送等,我的客户全权负责获取他们自己的数据,以便他们可以运行自己的报告/多维数据集。
我使用的脚本如下使用分布式TSQL和链接服务器到(B): -
DECLARE @sqlCommand VARCHAR(2000)
DECLARE @LastProcessedDate DATETIME
-- run the following code for Table 1 to Table XX
SELECT @LastProcessedDate = LastProcessedDate
FROM [ProcessControl]
WHERE TableName = 'table_1'
SET @sqlCommand = 'INSERT INTO Table1
SELECT *
FROM OPENQUERY(VendorsLinkedServerName,
''SELECT *
FROM Table1
WHERE LastModified >= '''' + @LastProcessedDate + '''')'
EXEC @sqlCommand
我为 1 个全天的数据对 10 个最大的表进行了初步试验,花了 1 个小时,这太长了。同样对于测试,我已经删除了除了表的主键(包括 1-4 BIGINT 列)之外的所有索引和约束。关于如何加快加载时间或加载数据的任何建议?
编辑:只是补充一下,如果你想知道为什么选择语句是这样写的,在上面的例子中(A)中的表1在一个ETL数据库中,随后将比较数据以确定实际中的插入/更新/删除(A) 中的报告数据库