2011-03-17 19 views
23

संभव डुप्लिकेट पर शामिल हों:
MySQL: Inner join vs Where
Explicit vs implicit SQL joinsMySQL प्रदर्शन: बनाम कहां

वहाँ कोई अंतर प्रदर्शन बुद्धिमान है जब हम "में शामिल होने" और "कहां का उपयोग करके क्वेरी में शामिल होने को चलाने "खंड? (तालिकाओं की संख्या या तालिकाओं में प्रविष्टियों की संख्या के बावजूद)

यह सुनिश्चित नहीं है कि इस विषय पर पहले से ही चर्चा की गई है या नहीं। यहां तक ​​कि यदि भी, मैं जानना चाहता हूं कि mySQL (5.1 और ऊपर) के नवीनतम संस्करणों के साथ, चीजें बदल गई हैं।

एक स्पष्टीकरण बयान स्पष्ट रूप से विचाराधीन पंक्तियों की संख्या में बहुत अंतर दिखाता है।

सिंटेक्स मैं उपयोग कर रहा हूँ है:

पर

SELECT <field names> 
FROM <table1> 
JOIN <table2> ON <join_condition> 
AND JOIN <table3> ON <join_condition> 
AND JOIN <table4> ON <join_condition> 
.... 

शामिल हों का उपयोग का उपयोग कहां

SELECT <field names> 
FROM <table names list separated by comma> 
WHERE <join_condition> 
AND <join_condition> 
AND <join_condition> 
.... 

तो यकीन नहीं है कि क्या उपयोग के आधार पर संयोजन या कहां खंड एक फर्क होता है। कृपया सहायता करें।

+1

http://stackoverflow.com/questions/5273942/mysql-inner-join-vs-where और http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins –

+1

हम्म का डुप्लिकेट ... यह सब के बाद एक डुप्लिकेट नहीं हो सकता है, क्योंकि वसुंथकुमार सुझाव देते हैं कि व्याख्या योजना अलग है। क्या आप उन योजनाओं को प्रदान कर सकते हैं? –

+0

ड्यूनो MySQL के बारे में लेकिन ओरेकल में ये पूरी तरह से समकक्ष हैं। –

उत्तर

2

मुझे संदेह है कि "जॉइन" का उपयोग करके "बाएं जॉइन" कर रहा है। "इनर जॉइन" का उपयोग करने का प्रयास करें और देखें कि समझाया गया कथन समान है या नहीं।

SELECT <field names> 
FROM <table1> 
INNER JOIN <table2> ON <join_condition> 
INNER JOIN <table3> ON <join_condition> 
INNER JOIN <table4> ON <join_condition> 
... 

आंतरिक जुड़ने का उपयोग करते समय, मैं उम्मीद नहीं करता कि आपके दो प्रश्नों के बीच प्रदर्शन अंतर हो। मैं उचित इंडेक्स होने के बारे में और चिंता करूंगा। सुनिश्चित करें कि शामिल स्थितियां अनुक्रमित कॉलम का उपयोग करके एक मैच बना सकती हैं।

+0

यह काफी आश्चर्यजनक होगा। 'बाएं जॉइन' 'बाएं बाहरी जॉइन' के लिए एक पर्याय है। दस्तावेज़ीकरण देखें: http://dev.mysql.com/doc/refman/5.1/en/join.html –

+0

आप सही हैं। मेरे प्रारंभिक बयान को अनदेखा करें। –

+3

'जॉइन ... ON' 'INNER JOIN' के लिए समानार्थी है और' ON' के बिना 'जॉइन' 'क्रॉस जॉइन 'का समानार्थी है। प्रलेखन: http://dev.mysql.com/doc/refman/5.0/en/join.html –

2

यहाँ इन दो दृष्टिकोण का एक अच्छा विश्लेषण है: SQL left join vs multiple tables on FROM line?

इस विवरण सामान्य है, मैं भी यकीन है कि MySQL के इस मामले में क्या करता है नहीं कर रहा हूँ; लेकिन किसी भी तरह से मुद्दा यह है कि एक जॉइन हमेशा अधिक स्पष्ट और स्पष्ट होता है और क्वेरी के तर्क में कोई बड़ा बदलाव नहीं होने के कारण एक इंजन से दूसरे में स्थानांतरित किया जा सकता है।

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