ฉันมีสองแบบสอบถามที่คล้ายกันที่สร้างแผนแบบสอบถามเดียวกันยกเว้นว่าแผนแบบสอบถามหนึ่งดำเนินการสแกนดัชนีแบบกลุ่ม 1316 ครั้งในขณะที่คนอื่น ๆ ดำเนินการมัน 1 ครั้ง
ข้อแตกต่างระหว่างแบบสอบถามทั้งสองนี้คือเกณฑ์วันที่แตกต่างกัน แบบสอบถามที่ใช้เวลานานจริง ๆ แล้ว จำกัด วันที่ให้แคบลงและดึงข้อมูลน้อยลง
ฉันได้ระบุดัชนีบางอย่างที่จะช่วยในการสืบค้นทั้งสองข้อ แต่ฉันต้องการเข้าใจว่าทำไมตัวดำเนินการ Clustered Index Scan จึงเรียกใช้งาน 1,316 ครั้งสำหรับการสืบค้นที่เกือบจะเหมือนกับครั้งที่เรียกใช้งาน 1 ครั้ง
ฉันตรวจสอบสถิติเกี่ยวกับเภสัชจลนศาสตร์ที่กำลังถูกสแกนและพวกเขาค่อนข้างทันสมัย
ข้อความค้นหาเดิม:
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'
ตรงกับเกณฑ์และตั้งแต่นั้นมามีการเพิ่มจำนวนเม็ดมีดที่ไม่เหมาะสมในช่วงนั้น โดยประมาณจะต้องใช้การประมวลผลเพียง 1.07 รายการสำหรับช่วงวันที่นั้น ไม่ใช่ 1,316 ที่เกิดขึ้นจริง