निष्पादन योजनाएं महान हैं लेकिन कभी-कभी वे आपको केवल सच नहीं बताते हैं। तो यहाँ प्रदर्शन परीक्षण के आधार पर एक प्रमाण है।
(और निचला रेखा - हर पंक्ति के लिए अभिव्यक्ति का मूल्यांकन नहीं किया जा रहा है)
;with t(i) as (select 0 union all select i+1 from t where i < 9)
select getdate()-1 as col1,getdate() as col2,getdate() as col3
into #t
from t t0,t t1,t t2,t t3,t t4,t t5,t t6,t t7
(100000000 पंक्ति) प्रभावित
यह ओपी क्वेरी है और इसे चलाने में लगभग 12 सेकंड लगते हैं
SELECT col1
FROM #t
WHERE
DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
BETWEEN col2
AND col3
;
यह क्वेरी जो निष्पादन से पहले एक पैरामीटर में दिनांक संग्रहीत करती है, लगभग उसी समय, 12 सेकंड लगती है।
declare @dt datetime = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
SELECT col1
FROM #t
WHERE
@dt
BETWEEN col2
AND col3
;
और परिणामों को सत्यापित करने के लिए -
यह क्वेरी जो कॉल 1 पर गणना करती है और इसलिए प्रत्येक पंक्ति के लिए अभिव्यक्ति को पुन: परिकलित करना होता है, जिसे चलाने में लगभग 30 सेकंड लगते हैं।
SELECT col1
FROM #t
WHERE
DATEADD(dd, 0, DATEDIFF(dd, 0, col1))
BETWEEN col2
AND col3
;
एक ही मीट्रिक के बारे में दिखाते हुए सभी प्रश्नों को बार-बार निष्पादित किया गया
GETDATE()
।