我在服务器 (ServerA) 上运行了一个 sql 脚本
该服务器设置了链接服务器 (ServerB) - 它位于数据中心的异地。
此查询相对较快地工作:
SELECT OrderID
FROM [ServerB].[DBName].[dbo].[MyTable]
WHERE Transferred = 0
但是,当使用此查询更新同一个表时:
UPDATE [ServerB].[DBName].[dbo].[MyTable]
SET Transferred = 1
需要 > 1 分钟才能完成(即使只有 1 列 Transferred = 0)
这是否有任何理由如此缓慢?
我应该在 MyTable 上为“Transferred”列建立索引吗?
最佳答案
如果您(我的意思是 SQL 服务器)不能在远程端使用索引来选择记录,这种远程更新实际上从远程端读取所有记录(主键和其他需要的字段),在本地更新这些并将更新的记录发回。如果您的链接速度很慢(比如 10Mbit/s 或更少),那么这种情况需要很多时间。
我在远程端使用了存储过程 - 这样你应该只远程调用该过程(使用一组可选参数)。如果您的可更新子集很小,那么适当的索引也可能有所帮助 - 但存储过程通常更快。
关于sql - 使用链接服务器的 SQL 更新速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712611/