sql - 使用链接服务器的 SQL 更新速度非常慢

标签 sql sql-server linked-server

我在服务器 (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/

相关文章:

mysql - from 子句中的列 'idproduct' 不明确

sql - 如何通过未知文件在SQL Server中设置数据库?

SQL Server 2005 : conversion failed when converting the varchar value '0.00' to data type int

sql-server - 无法从链接的 SQL Server 查询 View

SQL连接具有特定条件的两个表

php - 遵循 friend 的 friend 的建议 MySQL

sql-server - T-SQL CASE/子查询

SQL 整数和 '&' 符号

linked-server - OLE DB 提供程序 ' 用于链接服务器返回的数据与预期的数据长度不匹配

sql-server - 如何在 SQL Server 2017 中使用 MFA 创建 Azure SQL 数据库的链接服务器