2011-11-30 20 views
8

मान लीजिए मैं दो शर्तों के साथ एक MySQL क्वेरी:आदेश

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

पहली शर्त स्पष्ट रूप से एक बहुत दूसरे की तुलना में सस्ता होने जा रहा है, इसलिए मुझे लगता है कि यह सुनिश्चित हो करना चाहते हैं यह पहले चलता है, पंक्तियों के पूल को सीमित करता है जिसे तुलना खंड के साथ तुलना की जाएगी। MySQL क्वेरी शर्तों को सूचीबद्ध क्रम में चलाएं या यदि नहीं, तो ऑर्डर निर्दिष्ट करने का कोई तरीका है?

उत्तर

6

MySQL में एक आंतरिक क्वेरी ऑप्टिमाइज़र है जो ज्यादातर मामलों में ऐसी चीजों का ख्याल रखता है। तो, आमतौर पर, आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।

लेकिन, ज़ाहिर है, क्वेरी ऑप्टिमाइज़र मूर्खतापूर्ण नहीं है। तो ...

आपको यह करने के लिए खेद है, लेकिन अगर आपको संदेह है कि कोई प्रश्न कम कुशलता से चल रहा है, तो आप EXPLAIN से परिचित होना चाहेंगे।

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

नहीं किसी विशिष्ट क्वेरी के निदान, बस संभावना पर विचार कर रही। EXPLAIN टिप के लिए धन्यवाद, मुझे इसे पढ़ना होगा। – wyatt

6

अनुकूलक वह उचित देखता क्रम में जहां की स्थिति का मूल्यांकन करेंगे।

एसक्यूएल declarative है: आप अनुकूलक क्या आप चाहते हैं, नहीं कैसे यह करने के लिए बताओ।

procedural/imperative भाषा (.net, जावा, php आदि) में आप कैसे कहते हैं और यह तय करेगा कि कौन सी स्थिति का मूल्यांकन किया जाता है।

नोट: "सही करने के लिए छोड़ दिया" (a+b)*c जैसे कुछ भाव में लागू होता है के रूप में आप उम्मीद थी

+1

बिल्कुल, आप प्रक्रियात्मक भाषाओं में 'या शर्त' के रूप में MySQL स्थिति निष्पादन के आदेश का उपयोग नहीं कर सकते हैं, आप 'if (a == 1 || b == 3) .. ', एक बार' == का उपयोग कर सकते हैं 1', 'बी == 3' कभी निष्पादित नहीं किया जाएगा। –