क्या इससे कोई फर्क पड़ता है कि क्या मैं कहां स्थित हूं या खंड में शामिल हूं, जो शामिल होने से संबंधित नहीं है? - 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/ (यदि वह लिंक कभी टूट जाता है, तो "अंडरस्टैंडिंग माईएसक्यूएल एक्सप्लेन" के लिए वेब पर खोज करें और आपको "संसाधन खोजने में कोई परेशानी नहीं होगी"।

In general, I would recommend the second form you used. It"s not so much a matter of technical reasons related to query execution as it is related to ease of modifying code later on, when/if you need to. For example, suppose you added four or five more joins. It would be difficult to read this query if WHERE clauses were sprinkled all over the place.

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


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