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