स्लो एसक्यूएल क्वेरी को पढ़ने के बाद , यह सुनिश्चित करने के लिए कि कैसे अनुकूलन करना है , यह मुझे प्रश्नों के सामान्य प्रदर्शन के बारे में सोच रहा था। निश्चित रूप से, हमें अपने प्रश्नों को सम्मिलित करने के लिए पहले तालिका (जब अन्य तालिकाएँ सम्मिलित होती हैं) के परिणामों की आवश्यकता होती है, ताकि हमारे प्रश्नों को सम्मिलित करने के लिए (इस प्रश्न के लिए आंतरिक जोड़) जितना संभव हो उतना छोटा हो।
उदाहरण, यह होना चाहिए:
SELECT *
FROM ( SELECT * FROM table1 WHERE col = @val ) t
INNER JOIN table2 ON col = col2
इससे बेहतर / तेज़ हो:
SELECT *
FROM table1
INNER JOIN table2 ON col = col2
WHERE table1.col = @val
मेरा सिद्धांत इस प्रकार है (यह सही कार्यान्वयन नहीं हो सकता है, मैं एक SQL Server 2008 इंटर्नल बुक जिसे मैंने पढ़ा है (एमएसएफटी प्रेस) से याद रखने की कोशिश कर रहा हूं):
- क्वेरी प्रोसेसर को पहले बाईं तालिका (तालिका 1) मिलती है
- दूसरी तालिका (तालिका 2) से जुड़ता है और आवश्यक पंक्तियों (यदि लागू हो) को फ़िल्टर करने से पहले एक कार्टेशियन उत्पाद बनाता है।
- इसके बाद WHERE, ORDER BY, GROUP BY, HAVING क्लॉज़ स्टेटमेंट के साथ अंतिम प्रदर्शन करता है।
इसलिए यदि ऊपर दिए गए # 1 कथन में, तालिका छोटी है, तो कार्टेसियन उत्पादों को बनाते समय SQL इंजन को कम काम करना पड़ता है। फिर जब आप बयान में पहुंचते हैं, तो आपके पास एक कम परिणाम सेट होता है जिसमें से स्मृति में फ़िल्टर करना होता है।
मैं अभी तक यह असत्य है निशान से दूर हो सकता है। जैसा मैंने कहा, यह एक सिद्धांत है।
तुम्हारे विचार?
नोट : मैंने केवल इस प्रश्न के बारे में सोचा है और मुझे अभी तक किसी भी परीक्षण को चलाने का मौका नहीं मिला है।
नोट 2 : SQL सर्वर के रूप में टैग किया गया क्योंकि मुझे MySql आदि के कार्यान्वयन के बारे में कुछ भी पता नहीं है, कृपया किसी भी तरह से उत्तर देने / टिप्पणी करने के लिए स्वतंत्र महसूस करें