在sql存储过程中使用OPENQUERY的原因是什么?

时间:2014-01-06 22:28:13

标签: sql-server tsql openquery

我目前正在审核一些在数据库上运行存储过程的作业。所有这些存储过程都连接到链接服务器。我对这个功能不太熟悉。我正在尝试确定为什么使用这些而不仅仅是普通的查询,因为我正在运行的查询似乎正在拉入数据。

我读过这个,这是MSDN对openquery的解释。 :

http://technet.microsoft.com/en-us/library/ms188427.aspx

我也读过这个,这是一个stackoverflow链接,谈论为什么不在本地服务器上使用它。 :

Why is using OPENQUERY on a local server bad?

我的问题是,当存储过程需要链接服务器的嵌入式凭据时,您基本上只是使用它吗?或者是否有更多理由使用我不知道的OpenQuery?

1 个答案:

答案 0 :(得分:4)

我可以考虑使用openquery的两个优点。它可以通过在远程服务器上执行必要的过滤来减少您需要传输的数据量。它可以允许远程服务器上的查询优化器在连接表时选择最佳执行计划。

另一种选择是使用 REMOTE JOIN 我有一些运气使用它,但Aaron Bertrand在这里写了一篇很好的文章。http://www.mssqltips.com/sqlservertip/2765/revisit-your-use-of-the-sql-server-remote-join-hint/

以下是MS文档

REMOTE

  

指定在右表的站点上执行连接操作。当左表是本地表而右表是远程表时,这很有用。仅当左表的行数少于右表时,才应使用REMOTE。   如果右表是本地的,则在本地执行连接。如果两个表都是远程的但来自不同的数据源,则REMOTE会导致在右表的站点上执行连接。如果两个表都是来自同一数据源的远程表,则不需要REMOTE。   当使用COLLATE子句将连接谓词中的其中一个值转换为其他排序规则时,不能使用REMOTE。   REMOTE只能用于INNER JOIN操作。