Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या जॉइन में कुछ गड़बड़ है जो SQL या MySQL में जॉइन कीवर्ड का उपयोग नहीं करते हैं?

केवल 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 का उपयोग करती है "वाक्यविन्यास। मेरी राय में, इसके अस्तित्व का एकमात्र उद्देश्य संक्षिप्तता है। प्रदर्शन प्रभाव को ध्यान में रखते हुए, मुझे नहीं लगता कि यह एक सम्मोहक कारण है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ एकाधिक प्रश्न

  2. Ubuntu 12.04 पर phpMyAdmin के साथ MySQL कैसे स्थापित करें?

  3. दिनांक के बीच mysql क्वेरी का चयन करें?

  4. कैसे mysql में अनुक्रमिक क्रमांकन में अंतराल खोजने के लिए?

  5. अनुमानित पंक्तियों की गणना phpmyadmin परिणामों में बहुत भिन्न क्यों है?