मेरे पास क्वेरी है जो कुछ कॉलम पर गतिशील होने की आवश्यकता है, जिसका अर्थ है कि मुझे पैरामीटर मिलता है और इसके मूल्य के अनुसार मैं तय करता हूं कि मेरे कहां से कौन सा कॉलम लाने के लिए । मैं इस अनुरोध का उपयोग कर "मामले" अभिव्यक्ति को क्रियान्वित किया है:विभिन्न कॉलम चुनने के लिए खंड कहां "केस" का उपयोग करते हुए प्रदर्शन
(CASE @isArrivalTime WHEN 1 THEN ArrivalTime ELSE PickedupTime END)
>= DATEADD(mi, [email protected], @sTime)
AND (CASE @isArrivalTime WHEN 1 THEN ArrivalTime ELSE PickedupTime END)
< DATEADD(mi, [email protected], @fTime)
तो @isArrivalTime = 1
तो चुना ArrivalTime
स्तंभ बाकी PickedupTime
स्तंभ चुना है। मेरे पास ArrivalTime
पर क्लस्टर इंडेक्स है और PickedupTime
पर गैर-क्लस्टर इंडेक्स है।
मैंने देखा है कि जब मैं इस क्वेरी का उपयोग कर रहा हूं (@isArrivalTime = 1
के साथ), मेरा प्रदर्शन केवल ArrivalTime
का उपयोग करने की तुलना में बहुत खराब है।
हो सकता है कि क्वेरी ऑप्टिमाइज़र इस तरह से इंडेक्स को सही तरीके से उपयोग नहीं कर सके?
मैंने निष्पादन योजनाओं की तुलना में एक ध्यान दिया कि जब मैं CASE
का उपयोग कर रहा हूं, तो 32% समय सूचकांक स्कैन पर बर्बाद हो रहा है, लेकिन जब मैंने CASE (just used
आगमन समय का उपयोग नहीं किया था) केवल 3% बर्बाद हो गए थे इस सूचकांक स्कैन पर।
किसी को इसका कारण पता है?
याप, कि मेरी समस्या हल हो जाती बदलने की कोशिश। धन्यवाद! –