避免连接到链接服务器表。
可以使用四部分命名来进行连接,但成本更高。您的联接可以包含可用于限制来自链接服务器的数据集并使用索引列的条件。
Example:
SELECT loc.field1, lnk.field1
FROM MyTable loc
INNER JOIN RemoteServer.Database.Schema.SomeTable lnk
ON loc.id = lnk.id
AND lnk.RecordDate = GETDATE()
WHERE loc.SalesDate = GETDATE()
该查询还在连接中应用了链接服务器在计算连接之前可以使用的条件。
推荐的方法是使用 OPENQUERY。
通过使用 OPENQUERY 避免连接,本地服务器仅发送要远程执行的查询,而不是发送用于连接的一组 ID。
使用该链接检索一组数据并在本地执行计算。使用临时表(用于即席查询)或在夜间作业中将行插入永久表中。
开始事务可能会失败,具体取决于喜欢的服务器中是否设置了远程事务协调器。使用它会消耗更多的资源。
还要考虑到您正在访问运行应用程序的生产服务器,虽然您没有指定它,但我认为可以安全地假设正在使用大量事务并执行插入和更新。您正在从应用程序中夺走资源。
您的目的似乎是将数据用于报告目的。您的服务器可以设置为具有简单的日志而不是完整的日志,从而提高效率。
您还可以避免由于链接服务器上的数据移动而取消查询。请始终注意为查询和表提示(例如 NOLOCK)设置适当的隔离级别。
还有请!切勿将 OPENQUERY(或任何链接服务器)放置在循环内!