提高加入链接服务器的更新查询的性能

时间:2017-03-09 18:19:28

标签: sql-server performance linked-server

我在SQL Server中有2个链接服务器,并希望更新远程数据库中的1条记录 问题是查询需要很长时间(6分钟),因为这只是1条记录,我需要更新数千条,所以我需要采取另一种方法。我可以尝试其他任何想法或建议吗?

我在LocalTable的TaskID,TaskType和ClosedOn + Completed + Started以及RemoteTable的TaskID,TaskType和Status上有索引。

这就是我目前所拥有的

UPDATE RemoteTable
SET RemoteTable.TaskType = LocalTable.TaskType,
    RemoteTable.Status = CASE WHEN IsNull(LocalTable.ClosedOn, 0) <> 0 THEN 'Closed'
                              WHEN IsNull(LocalTable.Completed, 0) <> 0 THEN 'Completed'
                              WHEN IsNull(LocalTable.Started, 0) <> 0 THEN 'Started'
                        ELSE 'Created'
                END,
FROM Tasks LocalTable INNER JOIN [172.1.2.3].DBName.dbo.Tasks RemoteTable
     ON Local.TaskID = RemoteTable.TaskID
where RemoteTable.TaskID = 12345

执行计划如下:远程表扫描的100%位于远程表的任务ID上。 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为由于分布式事务到链接服务器,它很慢。

您是否可以在远程服务器上编写存储的Prodecure并调用该SP进行更新?

https://blog.sqlauthority.com/2007/10/06/sql-server-executing-remote-stored-procedure-calling-stored-procedure-on-linked-server/

如果我没记错(旧作业),INSERTS不会遇到此问题,因此您可以将数据加载到远程服务器上的临时表中,远程SP可以处理这些“命令”以进行更新。