फ़िल्टरिंग पूरी तरह से WHERE का उपयोग करके जुड़ती है कुछ सामान्य परिदृश्यों में बेहद अक्षम हो सकती है।उदाहरण के लिए:
SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'
अधिकांश डेटाबेस काफी सचमुच इस क्वेरी को निष्पादित करेंगे, पहले लोगों और कंपनियों टेबल के कार्तीय उत्पाद ले और फिर उन जो मिलान companyID और आईडी क्षेत्रों के आधार पर फ़िल्टर। जबकि पूरी तरह से unconstrained उत्पाद कहीं भी मौजूद नहीं है, लेकिन स्मृति में और फिर केवल एक पल के लिए, इसकी गणना में कुछ समय लगता है।
एक बेहतर तरीका उन जोड़ों के साथ बाधाओं को समूहित करना है जहां प्रासंगिक हैं। यह न केवल पढ़ने के लिए विषयपरक आसान है बल्कि यह भी अधिक कुशल है। Thusly:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
यह थोड़ी देर है, लेकिन डेटाबेस पर खंड को देखो और इसका इस्तेमाल गणना करने के लिए पूरी तरह से विवश सीधे शामिल हों, बल्कि सब कुछ के साथ शुरू और फिर नीचे सीमित से करने में सक्षम है। यह गणना करने के लिए तेज़ है (विशेष रूप से बड़े डेटा सेट और/या कई-टेबल जुड़ने के साथ) और कम स्मृति की आवश्यकता होती है।
मैं जो प्रश्न पूछता हूं उसे बदलता हूं जो "अल्पविराम जॉइन" वाक्यविन्यास का उपयोग करता है। मेरी राय में, इसके अस्तित्व के लिए एकमात्र उद्देश्य एकता है। प्रदर्शन प्रभाव को ध्यान में रखते हुए, मुझे नहीं लगता कि यह एक अनिवार्य कारण है।
स्रोत
2016-12-21 05:15:52
सहमत है, पहला स्पष्टता और नियंत्रण के लिए बेहतर है; यदि आप चाहते हैं तो जॉइन प्रकार को बदलना आसान है। –