2017-03-09 67 views
0

我在SQL Server中有2個鏈接的服務器,並且想要更新遠程數據庫中的1條記錄。
問題是查詢需要很長時間(6分鐘),並且因爲這隻有1條記錄,所以我需要更新數千個記錄,所以我需要採取另一種方法。我可以嘗試的其他任何想法或建議?提高更新查詢連接鏈接服務器的性能

我有LocalTable的的TaskID,任務類型的索引,並在ClosedOn + +已完成,並開始對RemoteTable的的TaskID,任務類型和狀態。

這是我目前有以下

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

你應該張貼的執行計劃 – jfatal

+0

問題出於好奇更新 –

+0

你嘗試過這個連接'FROM任務LocalTable INNER JOIN [172.1.2.3] .DBName.dbo.Tasks RemoteTable ON RemoteTable.TaskID = 12345和Local.TaskID = 12345' –

回答

1

我認爲這是緩慢的,由於分佈式事務的鏈接服務器。

您可以在遠程服務器上寫入Stored Prodecure並調用該SP來執行更新嗎?

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

如果我沒有記錯(舊作業)內頁不從這個問題上吃虧,所以你可以將數據加載到一個臨時表中的遠程服務器和遠程SP可以處理這些「命令」,以做更新。