Ich habe zwei ähnliche Abfragen, die denselben Abfrageplan generieren, mit der Ausnahme, dass ein Abfrageplan 1316-mal einen Clustered-Index-Scan ausführt, während der andere 1-mal ausgeführt wird.
Der einzige Unterschied zwischen den beiden Abfragen besteht in unterschiedlichen Datumskriterien. Durch die Abfrage mit langer Laufzeit werden die Datumskriterien tatsächlich enger und es werden weniger Daten abgerufen.
Ich habe einige Indizes identifiziert, die bei beiden Abfragen hilfreich sind, möchte jedoch nur verstehen, warum der Operator "Clustered Index Scan" 1316-mal für eine Abfrage ausgeführt wird, die praktisch mit der identisch ist, bei der sie 1-mal ausgeführt wird.
Ich habe die Statistiken der gescannten PK überprüft und sie sind relativ aktuell.
Ursprüngliche Abfrage:
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
Erzeugt diesen Plan:
Nach dem Eingrenzen der Datumsbereichskriterien:
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
Erzeugt diesen Plan:
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
Kriterien entsprach, und seitdem war die Anzahl der Einfügungen in diesem Bereich unverhältnismäßig hoch. Es wird geschätzt, dass für diesen Zeitraum nur 1,07 Ausführungen erforderlich sind. Nicht die 1.316, die sich in Wirklichkeit ergeben.