Ho due query simili che generano lo stesso piano di query, tranne per il fatto che un piano di query esegue una scansione dell'indice cluster 1316 volte, mentre l'altro lo esegue 1 volta.
L'unica differenza tra le due query sono criteri di data diversi. La query di lunga durata in realtà riduce i criteri di data e tira indietro meno dati.
Ho identificato alcuni indici che aiuteranno con entrambe le query, ma voglio solo capire perché l'operatore Clustered Index Scan sta eseguendo 1316 volte su una query praticamente identica a quella in cui viene eseguita 1 volta.
Ho controllato le statistiche sul PK in fase di scansione e sono relativamente aggiornate.
Query originale:
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
Genera questo piano:
Dopo aver ristretto i criteri dell'intervallo di date:
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
Genera questo piano:
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
criteri e da allora c'è stato un numero sproporzionato di inserti in quell'intervallo. Si stima che saranno necessarie solo 1,07 esecuzioni per quell'intervallo di date. Non i 1.316 che ne conseguono nella realtà.