2012-05-18 14 views
21

मुझे सरल प्रश्नों में पता है कि विशिष्ट और समूह की प्रदर्शन और निष्पादन योजना लगभग समान हैं।जब अलग और समूह का प्रदर्शन अलग होता है?

उदा

SELECT Name FROM NamesTable GROUP BY Name 
SELECT DISTINCT Name FROM NamesTable 

लेकिन मैंने कुछ परिदृश्यों में पढ़ा है कि उनका प्रदर्शन अलग होगा। subqueries, आदि में?

तो, क्या आप कुछ उदाहरण बना सकते हैं या कुछ परिदृश्यों को समझा सकते हैं जहां उनका प्रदर्शन अलग है?

बहुत धन्यवाद

+1

जब वे भी ऐसा ही बात, उनका प्रदर्शन वही है। जब वे अलग-अलग चीजें करते हैं, तो उनका प्रदर्शन अलग-अलग हो सकता है। यदि आपके पास रुचि रखने वाले विशिष्ट उदाहरण हैं, तो आपको उन्हें अपने प्रश्न में शामिल करना चाहिए। – AakashM

+0

क्या आप एक उदाहरण बना सकते हैं? –

+2

डाउनवॉट्स क्यों? यह एक उत्तरदायी, प्रोग्रामिंग से संबंधित प्रश्न है (हालांकि जवाब "नहीं है, हम नहीं कर सकते")। – Quassnoi

उत्तर

16

आप परिकलित मान फ़ील्ड सूची में आप कार्य योजना लागू में एक फर्क देखेंगे शामिल करते हैं।

select Value, 
     getdate() 
from YourTable 
group by UnitID 

select distinct 
     Value, 
     getdate() 
from YourTable 

group by क्वेरी एकत्रित करता है इससे पहले कि यह अदिश मूल्य गणना करता है। distinct क्वेरी कुल से पहले स्केलर मान की गणना करती है।

Example for producing different performance

और दूसरा उदाहरण:

+0

तो, यह संभावित रूप से एक अलग परिणाम और/या प्रदर्शन का उत्पादन कर सकता है। –

+2

@ विलियम - अलग नतीजे नहीं। मैंने देखा है कि सबसे स्पष्ट प्रदर्शन समस्या तब होती है जब आप 'xml' चाल के लिए स्ट्रिंग कॉन्सटेनेशन कर रहे होते हैं। मैंने दोनों संस्करणों को देखा है जो 'विशिष्ट' का उपयोग करते हैं और एक संस्करण जो 'समूह द्वारा' और 'समूह द्वारा' संस्करण का उपयोग करता है, बहुत तेज़ है। लेकिन 40 समूहों को उत्पन्न करने वाली 500000 से अधिक पंक्तियों को निष्पादित करते समय भी यह सरल क्वेरी प्रदर्शन प्रदर्शन दिखाती है। मेरे लिए, 'समूह द्वारा' 80 एमएस लेता है और 'विशिष्ट' 105 एमएस लेता है। –

+0

नहीं, यह निश्चित रूप से एक अलग परिणाम उत्पन्न कर सकता है। उदाहरण के लिए, कल्पना करें कि आपके पास एक गणना कॉलम है जैसे कि ROW_NUMBER() या एक उपयोगकर्ता परिभाषित फ़ंक्शन जो एक मान देता है। ऐसे परिदृश्यों में, अलग-अलग गणना के लिए तालिका में प्रत्येक पंक्ति के लिए गणना की गई कॉलम निष्पादित की जाती है, फिर स्केलर कॉलम जोड़े जाते हैं जबकि समूह का उपयोग करते समय, पहले प्रत्येक समूह के लिए स्केलर कॉलम समूहबद्ध होते हैं, गणना की गई कॉलम की गणना की जाती है। इसलिए वे अलग-अलग परिणाम उत्पन्न कर सकते हैं क्योंकि अलग और समूह एक अलग क्रम में परिकलित कॉलम निष्पादित करके। –

7

यहाँ 2 उदाहरण, एक अलग परिणाम और एक अलग प्रदर्शन के लिए अन्य के उत्पादन के लिए एक हैं

Example for producing different result

संबंधित मुद्दे

 संबंधित मुद्दे