मैं तालिका के मूल्यवान फ़ंक्शन से कुछ पंक्तियों का चयन कर रहा हूं लेकिन क्वेरी में SELECT TOP डालकर एक अतुलनीय बड़े पैमाने पर प्रदर्शन अंतर पाया है।SELECT TOP x का उपयोग करके एसक्यूएल बड़े पैमाने पर प्रदर्शन अंतर, जब एक्स चयनित पंक्तियों से अधिक है
SELECT col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
पूरा करने के लिए 5 या 6 मिनट के ऊपर ले रहा है।
हालांकि
SELECT TOP 6000 col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
के बारे में 4 या 5 सेकंड में पूरा करता है।
यह मुझे आश्चर्य नहीं करेगा अगर डेटा का लौटा सेट विशाल था, लेकिन 200,000 में से 5000 पंक्तियों में शामिल विशेष क्वेरी शामिल है।
इसलिए दोनों मामलों में, पूरी तालिका को संसाधित किया जाता है, क्योंकि SQL सर्वर 6000 पंक्तियों की खोज में अंत तक जारी रहता है जो इसे कभी नहीं मिलेगा। तब बड़ा अंतर क्यों? क्या एसक्यूएल सर्वर परिणाम सेट आकार की अपेक्षा में अंतरिक्ष आवंटित करता है (शीर्ष 6000 जिससे यह कम आवश्यकता देता है जिसे स्मृति में अधिक आसानी से आवंटित किया जाता है)? क्या किसी और ने ऐसा कुछ देखा है?
धन्यवाद
क्या आपने क्वेरी योजनाओं को देखा है? क्या कोई अंतर है? –
बस उत्सुक है, यदि आप शीर्ष 100 PERCENT चुनते हैं तो प्रदर्शन के साथ क्या होता है ....? –
मुझे लगता है कि आपके पास कुछ आंकड़े हैं जो क्वेरी ऑप्टिमाइज़र कोल्टर से बाहर फेंकता है। उदाहरण के लिए, ऑप्टिमाइज़र, इंडेक्स की बजाय टेबल स्कैन का उपयोग करने का निर्णय ले सकता है अगर यह मानता है कि तालिका में बहुत कम पंक्तियां हैं। यह शीर्ष क्वेरी को प्रभावित क्यों नहीं करता है, लेकिन निष्पादन योजनाओं की जांच करें। ये आपको दिखाता है कि सर्वर क्या करता है, और यह समझाएगा कि क्यों धीमा है। यह आपको अनुमानित और वास्तविक पंक्तियों की संख्या भी दिखाएगा। अगर कुछ अनुमान बंद हैं, आंकड़े अपडेट करें और पुनः प्रयास करें। :) –