【问题标题】:sql server - Openquery vs 4part namesql server - Openquery vs 4part name
【发布时间】:2018-05-28 10:40:39
【问题描述】:

引用远程服务器的视图

  1. 4 部分名称([ServerName]、[DatabaseName]、[Owner]、[Object Name]

  2. OpenQuery

哪个性能更好?

为什么性能好?

【问题讨论】:

    标签: sql sql-server openquery


    【解决方案1】:

    AFAIK,这在很大程度上取决于您的远程服务器类型。 在两个服务器(本地和远程)上使用最新的 SQL 版本(2016),我没有注意到任何区别。 如果您的远程服务器是其他任何东西(postgres、mysql...),您真的应该使用 OpenQuery,因为它在远程服务器上执行查询,只获得正确的结果集。如果您使用 4 部分名称,SQL Server 将在本地排序和过滤。

    例如,取一个 400 万条记录的表并执行如下查询:

    SELECT * FROM reoteserver.database.schema.table where id = 4
    

    使用openquery,sql server只会获取id为4的记录,不获取则获取所有表,然后过滤得到id为4的记录。

    【讨论】:

      【解决方案2】:

      这里迟到了,但本质上的区别是 4 部分查询是在本地执行的,因此无法使用索引或键,因为本地服务器不知道它们。相反,它本质上是检索整个对象,然后应用过滤器。在小表上,您不太可能注意到差异,但在具有数百万行的表上,您会注意到差异。 Openquery 本质上是告诉远程服务器代表它执行查询,然后将结果传回。

      我要说的一般规则是; 切勿使用 4 部分加入表。仅使用 Openquery 加入,我什至会尽可能避免,但这更多是个人喜好。

      但是,4 部分 SP 执行,即 EXEC ServerName.DBName.SchemaName.ObjectName 本质上是相同的,因为它也告诉远程服务器代表它执行查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 2013-01-11
        • 1970-01-01
        相关资源
        最近更新 更多