即使您在SQL server中获得了结果,来自链接服务器的查询是否仍在继续?

即使您在SQL server中获得了结果,来自链接服务器的查询是否仍在继续?,sql,sql-server,sql-server-2005,openquery,Sql,Sql Server,Sql Server 2005,Openquery,假设您有一个链接服务器X 如果要从表中的X中得到1行,则从模式结果中得到苹果。假设该表有十亿行 Select TOP 1 * from openquery(X , 'SELECT * FROM fruit.apples') 查询是否仍在后台的openquery语句中继续?或者,它是否会在获得结果后立即终止选择前1行?否,返回第一行后,SQLSERVER将立即停止处理更多行 下面是一个简单的测试查询来演示这一点 select top 1* from openquery(testserver,'s

假设您有一个链接服务器X

如果要从表中的X中得到1行,则从模式结果中得到苹果。假设该表有十亿行

Select TOP 1 * from openquery(X , 'SELECT * FROM fruit.apples')

查询是否仍在后台的openquery语句中继续?或者,它是否会在获得结果后立即终止选择前1行?

否,返回第一行后,SQLSERVER将立即停止处理更多行

下面是一个简单的测试查询来演示这一点

select top 1* from
openquery(testserver,'select * from performancev3.dbo.orders')
执行计划显示只扫描并返回一行


SQLSERVER使用迭代处理模型。因此,查询执行从rootSelect操作符开始,它要求top操作符返回一行,最后top操作符要求下面的语句返回一行。这是我的测试查询和观察结果

select 
--top 1 
*
from openquery(
DW,
'
select *
from visit_fact
where visit_type is not null
'
);
DW指向一个红砖数据库。它不能很好地处理为null或非null。这些查询运行缓慢。我还能够看到当前执行的任何查询的最后一行

visit_事实表大约有650万行

当我运行上述查询时,结果立即在SSMS中返回,但底部的信息显示查询仍在运行。当我使用其他内容查看正在运行的内容时,我还可以看到visit_type不为null的位置。它最终在5分钟左右完成


当我取消注释top 1时,SSMS立即显示查询已成功执行并返回一行。当我使用另一种方法查看正在运行的内容时,我什么也看不到。

@Dip,你是什么意思?当您得到结果时,查询执行就完成了。为什么你认为它仍然会在后台运行?@DanBracuk,为什么你说它会继续运行?@FLICKER我知道你从SELECT TOP 1中得到结果,但我是说在打开的查询中,你已经从fruit.apples中选择了SELECT*。即使你得到了你那一方的结果,那还是在处理中。哦,我明白你的意思了。为什么在openquery中没有前1个呢?但问题很有趣: