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

JOIN बनाम LEFT JOIN और WHERE कंडीशन परफॉर्मेंस सुझाव को अधिक विस्तार से समझाएं

प्रभावी रूप से, WHERE शर्तें और JOIN [INNER] JOIN . के लिए शर्तें PostgreSQL में 100% समकक्ष हैं। (स्पष्ट JOIN का उपयोग करना अच्छा अभ्यास है प्रश्नों को पढ़ने और बनाए रखने में आसान बनाने के लिए शर्तें)।

वही नहीं है LEFT JOIN के लिए सही है एक WHERE . के साथ संयुक्त शामिल होने के दाईं ओर एक मेज पर स्थिति। एक LEFT JOIN का उद्देश्य शामिल होने के बाईं ओर सभी पंक्तियों को संरक्षित करना है, भले ही दाईं ओर एक मैच की परवाह किए बिना। यदि कोई मिलान नहीं मिलता है, तो पंक्ति को NULL . के साथ बढ़ा दिया जाता है कॉलम के लिए मान दाईं ओर। मैनुअल:

<ब्लॉकक्वॉट>

LEFT OUTER JOIN

सबसे पहले, एक आंतरिक जुड़ाव किया जाता है। फिर, T1 में प्रत्येक पंक्ति के लिए जो T2 में किसी भी पंक्ति के साथ जुड़ने की स्थिति को पूरा नहीं करती है, एक सम्मिलित पंक्ति T2 के कॉलम में शून्य मानों के साथ जोड़ी जाती है। इस प्रकार, सम्मिलित टेबल में हमेशा T1 में प्रत्येक पंक्ति के लिए कम से कम एक पंक्ति होती है।

यदि आप WHERE . लागू करते हैं तो ऐसी स्थिति जिसके लिए NULL . के अलावा किसी और चीज़ की आवश्यकता होती है दाईं ओर तालिकाओं के स्तंभों पर मान, आप प्रभाव को शून्य कर देते हैं और जबरन LEFT [OUTER] JOIN परिवर्तित कर देते हैं एक सादे की तरह काम करने के लिए [INNER] JOIN , अधिक जटिल क्वेरी योजना के कारण बस (संभवतः) अधिक महंगा।

कई सम्मिलित तालिकाओं के साथ एक प्रश्न में, सर्वोत्तम (या एक अच्छी) क्वेरी योजना खोजने के लिए Postgres (या कोई RDBMS) कठिन है। तालिकाओं में शामिल होने के लिए सैद्धांतिक रूप से संभव अनुक्रमों की संख्या तथ्यात्मक रूप से grows बढ़ती है (!)। पोस्टग्रेज़ कार्य के लिए "जेनेरिक क्वेरी ऑप्टिमाइज़र" का उपयोग करता है और इसे प्रभावित करने के लिए कुछ सेटिंग्स हैं।

भ्रामक LEFT JOIN . के साथ क्वेरी को अस्पष्ट करना जैसा कि बताया गया है, क्वेरी प्लानर के काम को कठिन बनाता है, मानव पाठकों के लिए भ्रामक है और आमतौर पर क्वेरी लॉजिक में त्रुटियों पर संकेत देता है।

इससे उत्पन्न होने वाली समस्याओं के संबंधित उत्तर:

  • WHERE में शून्य बराबर पूर्णांक क्यों होता है?
  • बाएं जॉइन के साथ क्वेरी 0 की गिनती के लिए पंक्तियों को वापस नहीं कर रही है
  • प्रत्येक माता-पिता के लिए बाहरी जुड़ाव और सीमित चाइल्ड रिकॉर्ड का उपयोग करके SQL क्वेरी
  • बाएं बाहरी जुड़ाव आंतरिक जुड़ाव की तरह कार्य करता है
  • उन पंक्तियों का चयन करें जो अन्य तालिका में मौजूद नहीं हैं

आदि।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में दो डेटाबेस के बीच डेटा की तुलना कैसे करें?

  2. आप psql में स्क्रिप्ट चर का उपयोग कैसे करते हैं?

  3. क्या PostgreSQL क्वेरी में नामित स्थिरांक को परिभाषित करने का कोई तरीका है?

  4. PostgreSQL के लिए शीर्ष PG क्लस्टरिंग उच्च उपलब्धता समाधान

  5. PostgreSQL में मेरी तालिका पर अपेक्षा से अधिक चुनें DISTINCT धीमा है