क्या इससे कोई फर्क पड़ता है कि क्या मैं कहां स्थित हूं या खंड में शामिल हूं, जो शामिल होने से संबंधित नहीं है? - mysql, जुड़ें, अनुकूलन, क्वेरी-अनुकूलन

उदाहरण के लिए:

SELECT *
FROM a
JOIN b ON a.b_id = b.id
AND b.col = "something"

बनाम

SELECT *
FROM a
JOIN b ON a.b_id = b.id
WHERE b.col = "something"

मुझे लगता है कि MySQL क्वेरी ऑप्टिमाइज़र एक ही क्वेरी का संबंध होगा। क्या वे ऐसे सभी मामलों में एक ही हैं, चाहे टेबल पर एक कॉलम या टेबल बी हो?

उत्तर:

उत्तर № 1 के लिए 1

इन प्रश्नों को उसी तरह से संभाला जाएगामाई एसक्यूएल। आप इसे क्वेरी के सामने EXPLAIN EXTENDED लिखकर और क्वेरी निष्पादन योजना को देख कर सत्यापित कर सकते हैं। यदि आपको EXPLAIN क्वेरी के आउटपुट को समझने के लिए एक अच्छे संसाधन की आवश्यकता है, तो देखें http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/ (यदि वह लिंक कभी टूट जाता है, तो "अंडरस्टैंडिंग माईएसक्यूएल एक्सप्लेन" के लिए वेब पर खोज करें और आपको "संसाधन खोजने में कोई परेशानी नहीं होगी"।

सामान्य तौर पर, मैं आपके दूसरे रूप की सिफारिश करूंगाउपयोग किया गया। यह क्वेरी निष्पादन से संबंधित तकनीकी कारणों का इतना मामला नहीं है क्योंकि यह बाद में कोड को संशोधित करने में आसानी से संबंधित है, जब / यदि आपको आवश्यकता होती है। उदाहरण के लिए, मान लीजिए कि आपने चार या पांच और जोड़ दिए। यह मुश्किल होगा। इस क्‍वेरी को पढ़ने के लिए यदि सभी जगह क्‍लॉज को छिड़का गया था।

अपने जॉइन क्लॉज़ और अपने WHERE फ़िल्टर को बनाए रखनाअलग निश्चित रूप से एक ऐसी चीज है जिसे मैं सबसे अच्छा अभ्यास मानता हूं, लेकिन यह पढ़ने / संपादन में आसानी के साथ है, इसलिए नहीं कि आप "एक अलग क्वेरी निष्पादन योजना के साथ समाप्त होने वाले हैं (जब तक कि आप कोई गलती नहीं करते, जो मुझे लगता है कि ज्यादातर लोग करते हैं।" पहली क्वेरी के साथ दूसरे के विपरीत होने की संभावना अधिक होगी)


संबंधित सवाल
सबसे लोकप्रिय