sql server - Openquery vs 4part name

时间:2018-05-28 10:40:40

标签: sql sql-server openquery

引用远程服务器的视图

  1. 4part name([ServerName],[DatabaseName],[Owner],[Object Name]

  2. OPENQUERY

  3. 哪种表现更好?

    为什么表现良好?

2 个答案:

答案 0 :(得分:3)

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

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

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

使用openquery,sql server将只获取id为4的记录。如果没有,它将获取所有表,然后过滤它以获得id 4。

答案 1 :(得分:0)

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

我要说的一般规则是: 切勿使用4部分连接到桌子上。仅使用Openquery加入,我甚至会尽可能避免这种情况,但这更多是个人喜好。

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