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

时间:2017-10-24 18:06:36

标签: sql sql-server sql-server-2005 openquery

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

如果要从模式(水果)中获取表格(苹果)中的X行。假设该表有十亿行。

{
    success: true,
    results: 2,
    rows: [{
        Symbol: "LITL",
        CompanyName: "LancoInfratechLimited",
        ISIN: "INE785C01048",
        Ind: "-",
        Purpose: "Results",
        BoardMeetingDate: "26-Sep-2017",
        DisplayDate: "19-Sep-2017",
        seqId: "102121067",
        Details: "toconsiderandapprovetheUn-AuditedFinancialResultsoftheCompanyonstandalonebasisfortheQuarterendedJune30,2017."
    }, {
        Symbol: "PETRONENGG",
        CompanyName: "PetronEngineeringConstructionLimited",
        ISIN: "INE742A01019",
        Ind: "-",
        Purpose: "Results",
        BoardMeetingDate: "28-Sep-2017",
        DisplayDate: "21-Sep-2017",
        seqId: "102128225",
        Details: "Toconsiderandapprove,interalia,theUnauditedFinancialResultsoftheCompanyforthequarterendedonJune30,2017."
    }]
}

查询是否仍在后台的openquery语句中继续?或者一旦得到结果就终止(SELECT TOP 1)?

2 个答案:

答案 0 :(得分:1)

不,一旦返回第一行,SQLSERVER就会退出处理更多行。

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

select top 1* from
openquery(testserver,'select * from performancev3.dbo.orders')

执行计划显示只扫描并返回一行

enter image description here

SQLSERVER使用迭代处理模型。因此查询执行从root(Select运算符)开始,它要求顶级运算符返回一行,最后顶级运算符要求其下面的语句为一行

答案 1 :(得分:0)

这是我的测试查询和观察。

select 
--top 1 
*
from openquery(
DW,
'
select *
from visit_fact
where visit_type is not null
'
);

DW指向redbrick数据库。它不能很好地处理is nullis not null。那些查询运行缓慢。我还能够查看当前正在执行的任何查询的最后一行。

visit_fact表有大约650万行。

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

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