假设您有一个链接服务器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)?
答案 0 :(得分:1)
不,一旦返回第一行,SQLSERVER就会退出处理更多行。
下面是简单的测试查询来演示这个
select top 1* from
openquery(testserver,'select * from performancev3.dbo.orders')
执行计划显示只扫描并返回一行
SQLSERVER使用迭代处理模型。因此查询执行从root(Select运算符)开始,它要求顶级运算符返回一行,最后顶级运算符要求其下面的语句为一行
答案 1 :(得分:0)
这是我的测试查询和观察。
select
--top 1
*
from openquery(
DW,
'
select *
from visit_fact
where visit_type is not null
'
);
DW指向redbrick数据库。它不能很好地处理is null
或is not null
。那些查询运行缓慢。我还能够查看当前正在执行的任何查询的最后一行。
visit_fact表有大约650万行。
当我运行上述查询时,结果立即开始在SSMS中返回,但底部的信息显示仍在运行的查询。当我使用其他内容查看正在运行的内容时,我也可以看到where visit_type is not null
。它最终在5分钟左右完成。
当我取消注释top 1
时,SSMS会立即显示查询已成功执行并返回一行。当我使用其他方法查看正在运行的内容时,我什么也看不见。