引用远程服务器的视图
4part name([ServerName],[DatabaseName],[Owner],[Object Name]
OPENQUERY
哪种表现更好?
为什么表现良好?
答案 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基本上是相同的,因为它还告诉远程服务器代表它执行查询。