繁体   English   中英

SQL Server-OpenQuery与4part名称

[英]sql server - Openquery vs 4part name

引用远程服务器的视图

  1. 4部分名称([服务器名称],[数据库名称],[所有者],[对象名称]

  2. 开放查询

哪个表现更好?

为什么性能好?

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。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM