【问题标题】:What is the reasoning for using OPENQUERY within a tsql stored procedure?在 sql 存储过程中使用 OPENQUERY 的原因是什么?
【发布时间】:2014-01-06 22:28:13
【问题描述】:

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

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

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

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

Why is using OPENQUERY on a local server bad?

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

【问题讨论】:

    标签: sql-server tsql openquery


    【解决方案1】:

    我能想到使用 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。 当连接谓词中比较的值之一使用 COLLATE 子句强制转换为不同的排序规则时,不能使用 REMOTE。 REMOTE 只能用于 INNER JOIN 操作。

    【讨论】:

    • 好吧,这很有道理,我知道这一定是有原因的,只是无法辨别为什么它似乎无处不在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多