मौजूद
EXISTS का शाब्दिक अर्थ निर्दिष्ट मानदंडों के अस्तित्व की जाँच करना है। वर्तमान मानक SQL में, यह आपको तुलना के लिए एक से अधिक मानदंड निर्दिष्ट करने की अनुमति देगा - IE यदि आप जानना चाहते हैं कि col_a और col_b दोनों कब मेल खाते हैं - जो इसे IN खंड से थोड़ा मजबूत बनाता है। MySQL IN टुपल्स को सपोर्ट करता है, लेकिन सिंटैक्स पोर्टेबल नहीं है, इसलिए EXISTS पठनीयता और पोर्टेबिलिटी दोनों के लिए एक बेहतर विकल्प है।
EXISTS के साथ जागरूक होने वाली दूसरी बात यह है कि यह कैसे संचालित होता है - EXISTS एक बूलियन देता है, और पहले मैच पर एक बूलियन लौटाएगा। इसलिए यदि आप डुप्लीकेट/गुणकों के साथ काम कर रहे हैं, तो डेटा और जरूरतों के आधार पर EXISTS IN या JOINs की तुलना में तेजी से निष्पादित होगा।
IN
IN OR क्लॉज के लिए सिंटैक्टिक शुगर है। हालांकि यह बहुत ही अनुकूल है, लेकिन उस तुलना के लिए बहुत सारे मूल्यों (1,000 के उत्तर) से निपटने में समस्याएं हैं।
नहीं
NOT ऑपरेटर केवल लॉजिक को उलट देता है।
सबक्वायरी बनाम जॉइन
मंत्र "हमेशा जॉइन का उपयोग करें" त्रुटिपूर्ण है, क्योंकि माता-पिता के खिलाफ एक से अधिक चाइल्ड रिकॉर्ड होने पर जॉइन परिणाम सेट को बढ़ाने का जोखिम उठाते हैं। हां, आप इससे निपटने के लिए DISTINCT या GROUP BY का उपयोग कर सकते हैं, लेकिन यह बहुत संभावना है कि यह जॉइन मूट का उपयोग करने के प्रदर्शन लाभ को प्रस्तुत करता है। अपने डेटा को जानें, और परिणाम सेट के लिए आप क्या चाहते हैं - ये SQL लिखने की कुंजी हैं जो अच्छा प्रदर्शन करते हैं।
यह जानने के लिए कि कब और क्यों पता करना है कि क्या उपयोग करना है - LEFT JOIN IS NULL MySQL पर सबसे तेज़ बहिष्करण सूची है यदि तुलना किए गए कॉलम अशक्त नहीं हैं , नहीं तो IN/N NOT EXISTS बेहतर विकल्प हैं।
संदर्भ:
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS अशक्त स्तंभों पर
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS NOT Nulable कॉलम पर