ऐसा कोई तरीका नहीं है जिससे कोई आपको बता सके कि EXCEPT
एक समकक्ष OUTER JOIN
. को हमेशा या कभी भी आउट-परफॉर्म नहीं करेगा . ऑप्टिमाइज़र एक उपयुक्त निष्पादन योजना का चयन करेगा चाहे आप अपना इरादा कैसे भी लिखें।
उस ने कहा, यह मेरा दिशानिर्देश है:
EXCEPT
का उपयोग करें जब कम से कम एक निम्नलिखित में से सत्य है:
- क्वेरी अधिक पठनीय है (यह लगभग हमेशा सत्य होगी)।
- प्रदर्शन में सुधार हुआ है।
और दोनों निम्नलिखित में से सत्य हैं:
- क्वेरी अर्थ की दृष्टि से समान परिणाम देती है, और आप सभी किनारे के मामलों सहित पर्याप्त प्रतिगमन परीक्षण के माध्यम से इसे प्रदर्शित कर सकते हैं।
- प्रदर्शन खराब नहीं होता है (फिर से, सभी किनारे के मामलों में, साथ ही पर्यावरणीय परिवर्तन जैसे बफर पूल को साफ़ करना, आंकड़े अपडेट करना, योजना कैश साफ़ करना, और सेवा को पुनरारंभ करना)।
यह ध्यान रखना महत्वपूर्ण है कि एक समान EXCEPT
. लिखना एक चुनौती हो सकती है क्वेरी के रूप में JOIN
अधिक जटिल हो जाता है और/या आप कॉलम के हिस्से में डुप्लिकेट पर भरोसा कर रहे हैं लेकिन दूसरों पर नहीं। एक NOT EXISTS
लिखना समतुल्य, जबकि EXCEPT
. से थोड़ा कम पठनीय पूरा करने के लिए कहीं अधिक तुच्छ होना चाहिए - और अक्सर एक बेहतर योजना की ओर ले जाएगा (लेकिन ध्यान दें कि मैं कभी नहीं कहूंगा ALWAYS
या NEVER
, जिस तरह से मैंने अभी किया था, उसे छोड़कर)।
इस ब्लॉग पोस्ट में मैं कम से कम एक मामला प्रदर्शित करता हूं जहां EXCEPT
एक उचित रूप से निर्मित LEFT OUTER JOIN
दोनों द्वारा बेहतर प्रदर्शन किया गया है और निश्चित रूप से एक समकक्ष NOT EXISTS
. द्वारा भिन्नता।