में सामान्य रूप से एक एसक्यूएल क्वेरी ऑप्टिमाइज़र को नेस्टेड लूप और हैश जॉइन के बीच निर्णय लेता है।क्या एक एसक्यूएल क्वेरी ऑप्टिमाइज़र नेस्टेड लूप के बीच निर्णय लेता है और हैश
उत्तर
NESTED LOOPS
अच्छा है अगर लूप के अंदर की स्थिति sargable है, तो सूचकांक रिकॉर्ड की संख्या को सीमित करने के लिए उपयोग किया जा सकता है।
इस तरह एक प्रश्न के लिए:
SELECT *
FROM a
JOIN b
ON b.b1 = a.a1
WHERE a.a2 = @myvar
, a
साथ प्रमुख, a
से प्रत्येक रिकॉर्ड रखा जाएगा और b
में सभी इसी रिकॉर्ड नहीं मिले किया जाना चाहिए।
यदि b.b1
अनुक्रमित है और इसमें उच्च कार्डिनिटी है, तो NESTED LOOP
एक पसंदीदा तरीका होगा।
SQL Server
में, यह भी गैर equijoins निष्पादित करने के लिए (ON
खंड में =
हालत के अलावा कुछ)
HASH JOIN
सबसे तेजी से विधि है सब (या लगभग सभी) रिकॉर्ड पार्स किया जाना चाहिए अगर एक ही रास्ता है।
यह b
से सभी रिकॉर्ड लेता है, उन पर एक हैश टेबल बनाता है, फिर a
से सभी रिकॉर्ड लेता है और हैश तालिका देखने के लिए एक कॉल के रूप में शामिल कॉलम के मान का उपयोग करता है।
NESTED LOOPS
इस समय लगता है:Na * (Nb/C) * R
,जहां
Na
औरNb
a
औरb
में अभिलेखों का नंबर दिए गए हैं,C
सूचकांक प्रमुखता है, औरR
है के लिए आवश्यक निरंतर समय पंक्ति लुकअप (1
SELECT
,WHERE
औरORDER BY
खंडों में सभी फ़ील्ड इंडेक्स द्वारा कवर किए गए हैं, के बारे में10
अगर वे नहीं कर रहे हैं)HASH JOIN
इस समय लगता है:Na + (Nb * H)
, जहां
H
का निर्माण और हैश तालिका (देखने के रिकॉर्ड के अनुसार करने के लिए) की आवश्यकता स्थिरांक का योग है। वे इंजन में प्रोग्राम किए गए हैं।
SQL Server
, प्रमुखता तालिका आंकड़ों का उपयोग कर की गणना की गणना करता है और दो मानों तुलना और सबसे अच्छा योजना चुनता है।
आमतौर पर, यह उन सेटों के आकार पर निर्भर होने जा रहा है जो शामिल हो रहे हैं। Itzik द्वारा बेन-गण:
मैं अत्यधिक "T-SQL क्वैरी माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 के अंदर": पढ़ने की सलाह
http://www.solidq.com/insidetsql/books/insidetsql2008/
(2005 संस्करण के रूप में अच्छी तरह से बस के रूप में इस विषय पर लागू होता है)
वह आपके प्रश्नों के साथ-साथ कई अन्य लोगों को आपके प्रश्नों से अधिक लाभ उठाने के लिए आता है।
- 1. नेस्टेड लूप में शामिल होने और हैश एसक्यूएल सर्वर 2008
- 2. एसक्यूएल क्वेरी - नेस्टेड SELECT क्वेरी
- 3. क्यों एसक्यूएल सर्वर उपयोग नेस्टेड लूप
- 4. प्रक्रिया के विशेषाधिकार स्तर का क्या निर्णय लेता है?
- 5. प्रकार निर्णय नेस्टेड typedef
- 6. क्या PHP में ऑप्टिमाइज़र बनाया गया है?
- 7. रूबी: लूप और प्रत्येक लूप के बीच क्या अंतर है?
- 8. अनंत जबकि लूप और लूप के बीच अंतर क्या है?
- 9. एक नेस्टेड लूप
- 10. नेस्टेड हैश
- 11. नेस्टेड हैश
- 12. हैश एक एसक्यूएल पंक्ति है?
- 13. क्या find_or_create_by_ है जो रेल में हैश लेता है?
- 14. नेस्टेड लूप
- 15. रेल, दो आयामी तालिका, पिवट, नेस्टेड हैश लूप
- 16. एसक्यूएल और एसक्यूएल * प्लस के बीच क्या अंतर है?
- 17. एसक्यूएल क्वेरी एक स्ट्रिंग
- 18. लूप के लिए नेस्टेड रीफैक्टरिंग
- 19. नेस्टेड पथ और फाइलसेट के बीच क्या अंतर है?
- 20. प्रत्येक लूप के लिए नेस्टेड, आंतरिक लूप
- 21. सरणी और हैश के बीच क्या अंतर है?
- 22. केवल एक मैच के साथ क्वेरी के बीच एसक्यूएल अनुक्रमण?
- 23. PHP में, हैश और म्हाश के बीच क्या अंतर है?
- 24. हैश मैप और ट्रीमैप के बीच क्या अंतर है?
- 25. एक नेस्टेड हैश को एक फ्लैट हैश में परिवर्तित करना
- 26. एसक्यूएल सर्वर 2008 बहुत मेमोरी लेता है?
- 27. जबकि (सत्य) और लूप के बीच क्या अंतर है?
- 28. रेल नेस्टेड एसक्यूएल प्रश्नों
- 29. एसक्यूएल अंदरूनी क्वेरी के एक अद्यतन क्वेरी
- 30. उपग्रह असेंबली के लक्ष्य ढांचे संस्करण का क्या निर्णय लेता है?