तो, IN, EXISTS जैसा नहीं है और न ही यह एक ही निष्पादन योजना का उत्पादन करेगा।
आमतौर पर EXISTS का उपयोग सहसंबंधी उपशम में किया जाता है, इसका मतलब है कि आप अपनी बाहरी क्वेरी के साथ EXISTS आंतरिक क्वेरी को शामिल करेंगे। परिणाम उत्पन्न करने के लिए और कदम जोड़ेंगे क्योंकि आपको बाहरी क्वेरी जोड़ को हल करने की आवश्यकता होती है और आंतरिक क्वेरी जुड़ती है, फिर दोनों से जुड़ने के लिए उनके क्लॉसेस से मेल खाती है।
आमतौर पर IN का उपयोग बाहरी क्वेरी के साथ आंतरिक क्वेरी को सहसंबंधित किए बिना किया जाता है, और इसे केवल एक चरण में हल किया जा सकता है (सर्वोत्तम स्थिति में)।
इस पर विचार करो:
यदि आप IN और आंतरिक क्वेरी परिणाम का उपयोग अलग-अलग मानों की लाखों पंक्तियों में करते हैं, तो संभवतः यह दिए गए EXISTS की तुलना में SLOWER प्रदर्शन करेगा कि EXISTS क्वेरी निष्पादन योग्य है (बाहरी क्वेरी से जुड़ने के लिए सही अनुक्रमित है)।
यदि आप EXISTS का उपयोग करते हैं और आपकी बाहरी क्वेरी के साथ जुड़ना जटिल है (प्रदर्शन के लिए अधिक समय, कोई उपयुक्त अनुक्रमणिका नहीं है) तो यह क्वेरी को बाहरी तालिका में पंक्तियों की संख्या से धीमा कर देगा, कभी-कभी पूरा होने का अनुमानित समय दिनों में हो सकता है। यदि आपके दिए गए हार्डवेयर के लिए पंक्तियों की संख्या स्वीकार्य है, या डेटा की कार्डिनैलिटी सही है (उदाहरण के लिए एक बड़े डेटा सेट में कम DISTINCT मान) IN तो EXISTS से तेज प्रदर्शन कर सकता है।
उपरोक्त सभी को तब ध्यान दिया जाएगा जब आपके पास प्रत्येक टेबल पर उचित मात्रा में पंक्तियाँ हों (निष्पक्ष रूप से मेरा मतलब है कि आपके सीपीयू प्रसंस्करण और / या कैशिंग के लिए रैम थ्रेसहोल्ड से अधिक है)।
तो ANSWER यह DEPENDS है। आप IN या EXISTS के अंदर एक जटिल क्वेरी लिख सकते हैं, लेकिन अंगूठे के एक नियम के रूप में, आपको IN को विभिन्न मूल्यों के सीमित सेट और EXISTS के साथ उपयोग करने का प्रयास करना चाहिए, जब आपके पास बहुत सारे भिन्न मानों के साथ बहुत सी पंक्तियाँ हों।
चाल को स्कैन करने के लिए पंक्तियों की संख्या को सीमित करना है।
सादर,
MarianoC