这真让我抓狂。我有一个 WHILE 循环,它从链接服务器中获取 1 行并将其放入本地表中。逻辑工作正常,但循环会减慢处理的行数。
SELECT @max_id = MAX(id), @min_id = MIN(id)
FROM #ids
WHILE @min_id <= @max_id
BEGIN
SET @sql = 'SELECT row1, row2, row3 FROM [Linked Server Table]'
INSERT INTO [Local Table]
(row1 ,row2, row3)
EXEC(@sql)
SELECT @min_id = MIN(id)
FROM #id
WHERE id > @min_id
END
感觉好像有什么东西在记忆中堆积并减慢它的速度,但我不知道是什么。
到目前为止,我已经尝试过:-
将 INSERT 变成 SP
每 100 行添加一个 CHECKPOINT
将恢复模式更改为简单
将链接服务器行插入临时表或表变量
本地表上除了 PK 之外没有索引。链接服务器是一个 Atomix 数据库。
任何人都可以提出任何理由为什么这会变得越来越慢?
小号