하나의 쿼리 계획이 클러스터 된 인덱스 스캔을 1316 회 실행하고 다른 쿼리는 1 회 실행한다는 점을 제외하고 동일한 쿼리 계획을 생성하는 두 개의 유사한 쿼리가 있습니다.
두 쿼리의 유일한 차이점은 날짜 기준이 다릅니다. 장기 실행 쿼리는 실제로 날짜 기준을 좁히고 더 적은 데이터를 가져옵니다.
두 쿼리 모두에 도움이 될 몇 가지 인덱스를 식별했지만 클러스터 된 인덱스 스캔 연산자가 1 번 실행되는 쿼리와 거의 동일한 쿼리에서 1316 번 실행되는 이유를 이해하고 싶습니다.
스캔중인 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
이 계획을 생성합니다.
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
기준을 충족하는 행이 0 개 또는 1 개 뿐이고 그 이후로 해당 범위에 삽입 수가 불균형했습니다. 해당 날짜 범위에 대해 1.07의 실행 만 필요하다고 추정합니다. 실제로는 1,316 개가 아닙니다.