提高更新查询加入链接服务器的性能
Increase performance on update query joining Linked Servers
我在 SQL 服务器中有 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
下面的执行计划:远程 table 扫描的 100% 在远程 Table 的任务 ID 上。
我认为它很慢,因为链接服务器的分布式事务。
你能在远程服务器上编写一个存储过程并调用该存储过程来进行更新吗?
如果我没记错的话(旧工作)INSERTS 不会遇到这个问题,所以您可以将数据加载到远程服务器上的分段 table 并且远程存储过程可以处理这些 'commands' 进行更新。
我在 SQL 服务器中有 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
下面的执行计划:远程 table 扫描的 100% 在远程 Table 的任务 ID 上。
我认为它很慢,因为链接服务器的分布式事务。
你能在远程服务器上编写一个存储过程并调用该存储过程来进行更新吗?
如果我没记错的话(旧工作)INSERTS 不会遇到这个问题,所以您可以将数据加载到远程服务器上的分段 table 并且远程存储过程可以处理这些 'commands' 进行更新。