相关疑难解决方法(0)

为什么聚集索引扫描执行次数如此之高?

我有两个类似的查询,它们生成相同的查询计划,只是一个查询计划执行了 1316 次聚集索引扫描,而另一个执行了 1 次。

两个查询之间的唯一区别是不同的日期标准。长时间运行的查询实际上更窄了日期条件,并拉回了更少的数据。

我已经确定了一些对这两个查询都有帮助的索引,但我只想了解为什么 Clustered Index Scan 操作符在一个查询上执行 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
Run Code Online (Sandbox Code Playgroud)

生成这个计划: 在此处输入图片说明

缩小日期范围标准后:

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' …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization

16
推荐指数
1
解决办法
5216
查看次数

与索引相关的 NOT 逻辑的使用

根据 Microsoft 的数据库开发书70-433:Microsoft SQL Server 2008 数据库开发

前导通配符和NOT逻辑都不允许查询优化器使用索引来优化搜索。为了获得最佳性能,您应该避免使用NOT关键字和前导通配符。

所以我认为那是NOT INNOT EXISTS等等

现在关于这个SO问题,我认为@GBN 选择的解决方案会违反上面给出的声明。

显然,事实并非如此。

所以我的问题是:为什么?

index sql-server optimization

13
推荐指数
1
解决办法
1789
查看次数

标签 统计

optimization ×2

sql-server ×2

index ×1