2012-05-25 5 views
8

निम्नलिखित अभिव्यक्ति ले लो?क्या MySQL तर्क मूल्यांकन जॉइन क्लॉज में आलसी/शॉर्ट सर्किटिंग है? <code>FALSE AND (expression)</code></p> <p>MySQL अभिव्यक्ति का मूल्यांकन करेंगे या बस के रूप में जल्द ही यह <code>FALSE</code> देखता है के रूप में आगे बढ़ने:

कुछ पृष्ठभूमि context-- मैं ऐसा करके एक प्रश्न तेजी लाने के लिए चाहता था:

JOIN... ON (indexed_column1=indexed_column2 AND non_indexed_column_a=non_indexed_column_b)

कारण है कि मैं इस क्वेरी see this answer

कर रहा हूँ यह हो रहा है, तो हमेशा non_indexed_column_a=non_indexed_column_b का मूल्यांकन करने पर

पृष्ठभूमि के लिए तब उसके साथ कोई समय बचा नहीं है।

+0

मैं क्वेरी अनुकूलक पूरी तरह से इस तुच्छ मामले को खत्म करेगा लगता होगा। हालांकि, उन मामलों में जिन्हें स्थैतिक रूप से समाप्त नहीं किया जा सकता है, ऐसे इंजन, जैसे SQL सर्वर (दी गई, MySQL नहीं) ** मूल्यांकन आदेश ** की गारंटी नहीं देते हैं; क्योंकि यह वास्तव में उन्हें सूचकांक और इस तरह के साथ अधिक कुशल होने में मदद करता है। यह जानना दिलचस्प होगा कि MySQL- विशिष्ट कार्यान्वयन कैसे काम करता है, +1। –

+0

मैंने कुछ और संदर्भ जोड़ा है – babonk

+0

http://stackoverflow.com/questions/789231/is-the-sql-where-clause-short-circuit-evalu (नहीं * विशिष्ट * MySQL के लिए, लेकिन अच्छा कभी नहीं- कम), http://stackoverflow.com/questions/4449105/mysql-and-condition –

उत्तर

2

MySQL क्वेरी ऑप्टिमाइज़र जब भी संभव हो, इंडेक्स का उपयोग करता है और जितनी संभव हो उतनी पंक्तियों को खत्म करने के लिए सबसे प्रतिबंधित सूचकांक का उपयोग करता है।

तो आपकी क्वेरी के मामले में यह हमेशा पहले इंडेक्स कॉलम के आधार पर रिकॉर्ड फ़िल्टर करेगा और फिर रिकॉर्ड को गैर-इंडेक्स कॉलम से फ़िल्टर करेगा।

क्वेरी निष्पादन से पहले, MySQL हमेशा उस कोड को हटा देता है जो हमेशा झूठा होने वाला होता है (Dead Code)।

अधिक जानकारी के लिए देखें: http://www.informit.com/articles/article.aspx?p=377652&seqNum=2

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