SQL Server链接服务器更新 - 可怕的性能

时间:2017-12-13 17:42:43

标签: sql-server sql-update linked-server

在我的SQL Server 2012数据库中,我有一个链接服务器引用到第二个SQL Server数据库,我需要从中提取记录并相应地更新。

我正在尝试运行以下更新语句:

UPDATE
    Linked_Tbl
SET
    Transferred = 1
FROM
    MyLinkedServer.dbo.MyTable Linked_Tbl
JOIN 
    MyTable Local_Tbl ON Local_Tbl.LinkedId = Linked_Tbl.Id
JOIN 
    MyOtherTable Local_Tbl2 ON Local_Tbl.LocalId = Local_Tbl2.LocalId

在运行一小时后我不得不停下来,因为它仍在执行。

我在线阅读并found solutions说明最好的解决方案是在链接服务器本身上创建一个存储过程来执行更新语句,而不是通过网络运行它。

我遇到的问题是:

  1. 我无法在其他服务器上创建任何程序。
  2. 即使我可以创建该过程,我也需要将所有ID传递给存储过程进行更新,我不知道如何有效地使用数千个ID(这显然是较小的问题,但因为我不能首先创建该程序。)
  3. 我希望人们可能已经设法提出其他解决方案,因为通常情况下您没有权限对其他服务器进行更改。

    任何想法??

1 个答案:

答案 0 :(得分:-1)

我不确定,它是否能提供更多性能,你试试看:

    UPDATE
    Linked_Tbl
    SET
    Transferred = 1
    FROM OPENDATASOURCE([MyLinkedServer],'select Id, LocalId,Transferred from remotedb.dbo.MyTable') AS Linked_Tbl
    JOIN MyTable Local_Tbl
    ON Local_Tbl.LinkedId = Linked_Tbl.Id
    JOIN MyOtherTable Local_Tbl2
    ON Local_Tbl.LocalId = Local_Tbl2.LocalId