J'ai deux requêtes similaires qui génèrent le même plan de requête, sauf qu'un plan de requête exécute un balayage d'index en cluster 1316 fois, tandis que l'autre l'exécute 1 fois.
La seule différence entre les deux requêtes réside dans des critères de date différents. La requête de longue durée réduit en fait les critères de date et recule moins de données.
J'ai identifié certains index qui aideront avec les deux requêtes, mais je veux juste comprendre pourquoi l'opérateur Clustered Index Scan exécute 1316 fois sur une requête qui est pratiquement la même que celle où il s'exécute 1 fois.
J'ai vérifié les statistiques sur le PK en cours d'analyse, et elles sont relativement à jour.
Requête d'origine:
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
Génère ce plan:
Après avoir réduit les critères de plage de dates:
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
Génère ce plan:
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
critères et depuis lors, il y a eu un nombre disproportionné d'insertions dans cette plage. Il estime que seulement 1,07 exécution sera nécessaire pour cette plage de dates. Pas les 1316 qui s'ensuivent dans la réalité.