【发布时间】:2018-05-28 10:40:39
【问题描述】:
引用远程服务器的视图
4 部分名称([ServerName]、[DatabaseName]、[Owner]、[Object Name]
OpenQuery
哪个性能更好?
为什么性能好?
【问题讨论】:
标签: sql sql-server openquery
引用远程服务器的视图
4 部分名称([ServerName]、[DatabaseName]、[Owner]、[Object Name]
OpenQuery
哪个性能更好?
为什么性能好?
【问题讨论】:
标签: sql sql-server openquery
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 加入,我什至会尽可能避免,但这更多是个人喜好。
但是,4 部分 SP 执行,即 EXEC ServerName.DBName.SchemaName.ObjectName 本质上是相同的,因为它也告诉远程服务器代表它执行查询。
【讨论】: