Saya memiliki dua pertanyaan serupa yang menghasilkan rencana kueri yang sama, kecuali bahwa satu rencana kueri menjalankan Pemindaian Indeks Cluster 1316 kali, sedangkan yang lainnya mengeksekusi 1 kali.
Satu-satunya perbedaan antara dua kueri adalah kriteria tanggal yang berbeda. Permintaan yang berjalan lama sebenarnya kriteria tanggal yang lebih sempit, dan menarik lebih sedikit data.
Saya telah mengidentifikasi beberapa indeks yang akan membantu dengan kedua permintaan, tetapi saya hanya ingin memahami mengapa operator Clustered Index Scan mengeksekusi 1316 kali pada kueri yang hampir sama dengan yang di mana ia mengeksekusi 1 kali.
Saya memeriksa statistik pada PK yang sedang dipindai, dan mereka relatif terbaru.
Permintaan asli:
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
Buat rencana ini:
Setelah mempersempit kriteria rentang tanggal:
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
Buat rencana ini:
FI_IncidentDate between '2011-07-01 00:00:00.000' and '2011-07-02 00:00:00.000'
kriteria dan sejak itu telah ada jumlah sisipan yang tidak proporsional dalam kisaran itu. Diperkirakan hanya 1,07 eksekusi akan diperlukan untuk rentang tanggal tersebut. Bukan 1.316 yang terjadi dalam kenyataannya.