मेरे पास दो समान प्रश्न हैं जो एक ही क्वेरी योजना उत्पन्न करते हैं, सिवाय इसके कि एक क्वेरी प्लान क्लस्टर्ड इंडेक्स स्कैन 1316 बार निष्पादित करता है, जबकि दूसरा इसे 1 बार निष्पादित करता है।
दोनों प्रश्नों के बीच एकमात्र अंतर अलग-अलग तिथि मानदंड है। लंबे समय तक चलने वाली क्वेरी वास्तव में डेट मानदंड को कम करती है, और कम डेटा वापस खींचती है।
मैंने कुछ इंडेक्स की पहचान की है जो दोनों प्रश्नों के साथ मदद करेंगे, लेकिन मैं सिर्फ यह समझना चाहता हूं कि क्लस्टर्ड इंडेक्स स्कैन ऑपरेटर क्वेरी पर 1316 बार क्यों निष्पादित कर रहा है जो वस्तुत: उसी के समान है जहां यह 1 बार निष्पादित होता है।
मैंने 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'
मापदंड को पूरा करने वाली केवल शून्य या एक पंक्ति थी और तब से उस सीमा में आवेषणों की संख्या विषम हो गई है। यह अनुमान है कि उस तिथि सीमा के लिए केवल 1.07 निष्पादन की आवश्यकता होगी। 1,316 नहीं जो वास्तविकता में सुनिश्चित करता है।