sql server-Openquery vs 4部分名称

sql server-Openquery vs 4部分名称,sql,sql-server,openquery,Sql,Sql Server,Openquery,引用远程服务器的视图 4部分名称[服务器名称],[数据库名称],[所有者],[对象名称] OpenQuery 哪个性能更好 为什么性能好?好吧,这在很大程度上取决于您的远程服务器类型。 对于本地和远程服务器上的最新SQL版本2016,我没有注意到任何差异。 如果你的远程服务器是postgres,mysql。。。您确实应该使用OpenQuery,因为它在远程服务器上执行查询,只获得正确的结果集。如果使用4部分名称,SQL server将在本地进行排序和筛选 例如,以400万条记录表为例,执行如下查

引用远程服务器的视图

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

OpenQuery

哪个性能更好


为什么性能好?

好吧,这在很大程度上取决于您的远程服务器类型。 对于本地和远程服务器上的最新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。

好的,这在很大程度上取决于您的远程服务器类型。 对于本地和远程服务器上的最新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,本质上是相同的,因为这也会通知远程服务器代表其执行查询。

这里的当事人很晚,但本质上的区别在于,由4部分组成的查询是在本地执行的,因此,无法使用索引或密钥,因为本地服务器不知道它们。实际上,它检索整个对象,然后应用过滤器。在一张小桌子上,您不太可能注意到差异,但在一张有数百万行的桌子上,您会注意到差异。Openquery本质上告诉远程服务器代表它执行查询,然后将结果传回

我想说的一般规则是; 切勿使用4部分连接到表上。只使用Openquery加入,我甚至会尽可能避免,但这更多的是个人偏好

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