TSQL क्यों एक चर के साथ तेजी से ऊपर है?


10

सभी को सुप्रभात,

मैं थर्ड पार्टी प्रोडक्ट्स डेटाबेस से कुछ डेटा को 'प्राप्त' करने के लिए कुछ मामूली जटिल एसक्यूएल पर काम कर रहा हूं, इसे घर के अनुप्रयोगों में हमारे स्वयं के प्रदर्शित करने के लिए।

मैंने उप-तालिका के भीतर एक तालिका से शीर्ष रिकॉर्ड प्राप्त करने के लिए एक चयन में जोड़ा (यदि thats समझ में आता है)

क्वेरी ने 100 रिकॉर्ड का उपयोग करके अंतिम परिणाम सेट को वापस करने के लिए लगभग 3minutes लिया

SELECT TOP 1 ...

मैं जो कुछ हासिल करने की कोशिश कर रहा था उसमें सुधार के लिए ऑनलाइन एक नज़र थी और यह सुझाव दिया गया था कि मैं एक चर का उपयोग करने के लिए अपने चयन को बदल दूं, जैसे कि नीचे

DECLARE @topCount INT
SET @topCount = 1

SELECT TOP (@topCount) ...

यह 3minutes से 1second तक नीचे एक ही क्वेरी लेता है, जो बहुत अच्छा है!

लेकिन क्या कोई समझा सकता है कि ऐसा क्यों है।

जवाबों:


14

जब आप top 1क्वेरी ऑप्टिमाइज़र करते हैं , तो एक योजना बनाई जाएगी जो 1 पंक्ति को जितनी जल्दी हो सके लाने के लिए बनाई गई है।

जब आप किसी स्थानीय चर का उपयोग करते हैं, तो चर का मान अनुकूलक के लिए अज्ञात होता है और इसके बजाय एक योजना बनाता है जो 100 पंक्तियों को जितनी जल्दी हो सके अनुकूलित किया जाता है।

आपके मामले में 100 के एक पंक्ति लक्ष्य के साथ उत्पन्न क्वेरी योजना केवल एक पंक्ति चाहते हुए भी उपयोग करने के लिए बेहतर योजना है।

सत्यापित करने के लिए आप option (recompile)चर के साथ अपनी क्वेरी को जोड़ने का प्रयास कर सकते हैं । उस स्थिति में SQL सर्वर @topCountएक पंक्ति लक्ष्य के रूप में वर्तमान मूल्य का उपयोग करेगा और 1 के बाद से आपको धीमी योजना मिलनी चाहिए।


मैं योजना में अंतर को समझता हूं, लेकिन यह मुझे आश्चर्यचकित करता है कि 1 पंक्ति को लाने से 100 पंक्तियों को लाने की तुलना में धीमी हो सकती है। मुझे लगता है कि अगर 100-पंक्ति योजना सबसे अच्छा काम करती है, तो SQL सर्वर उसी योजना का उपयोग करेगा top 1
ब्रैंडन

@ फिर भी यह 100 पंक्तियों को नहीं लाता है, केवल निष्पादन की योजना इस धारणा के साथ बनाता है कि 100 पंक्तियाँ वही हैं जो चाहता है। 1 पंक्ति मिलने पर निष्पादन समाप्त हो जाता है।
मिकेल एरिकसन

इन मामलों में निष्पादन योजना के साथ क्या अलग है यह जाँचना संभवत: यह समझने में मदद करेगा कि समस्या शीर्ष 1 के साथ क्या है।
जेम्स जेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.