我有两个类似的查询生成相同的查询计划,除了一个查询计划执行1316次“聚簇索引扫描”,而另一个查询计划执行1次。
这两个查询之间的唯一区别是日期标准不同。长时间运行的查询实际上会缩小日期条件,并拉回较少的数据。
我已经确定了一些对两个查询都有用的索引,但是我只想了解为什么“聚集索引扫描”运算符在查询上执行1316次实际上与执行1次查询相同。
我检查了有关正在扫描的PK的统计信息,它们是相对最新的。
原始查询:
select distinct FIR_Incident.IncidentID
from FIR_Incident
left join (
select incident_id as exported_incident_id
from postnfirssummary
) exported_incidents on exported_incidents.exported_incident_id = fir_incident.incidentid
where FI_IncidentDate between '2011-06-01 00:00:00.000' and '2011-07-01 00:00:00.000'
and exported_incidents.exported_incident_id is not null
生成此计划:
缩小日期范围标准后:
select distinct FIR_Incident.IncidentID
from FIR_Incident
left join (
select incident_id as exported_incident_id
from postnfirssummary
) exported_incidents on exported_incidents.exported_incident_id = fir_incident.incidentid
where FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
and exported_incidents.exported_incident_id is not null
生成此计划:
您可以将查询复制/粘贴到代码块而不是图像文件中吗?
—
埃里克·汉弗莱
当然-我添加了生成每个计划的查询。
—
Seibar 2011年
聚集索引扫描发生在哪个表上?
—
埃里克·汉弗莱
聚簇索引扫描位于左联接中的子查询上(PostNFIRSSummary)
—
Seibar 2011年
大概是上次更新统计信息时,只有零或一行符合
—
马丁·史密斯
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
条件,此后此范围内插入的数量不成比例。它估计在该日期范围内仅需要执行1.07次。实际上并不是1,316。