मुझे लगता है कि ज्यादातर मामलों में उन दोनों के बीच का अंतर इतना छोटा होने वाला है कि पसंद को ज्यादातर उस कार्यान्वयन को चुनकर संचालित किया जाना चाहिए जो पहली बार कोड को देखने वाले किसी व्यक्ति के लिए सबसे अधिक समझ में आता है।
हालांकि, मुझे लगता है कि अपवाद प्रबंधन में कुछ छोटा है फायदे:
-
एक्सेप्शन हैंडलिंग संभावित रेस कंडीशन से बचाती है। यदि कोई अन्य प्रक्रिया आपके चेक और आपके इंसर्ट के बीच एक रिकॉर्ड सम्मिलित करती है, तो 'चेक करें, फिर डालें' विधि विफल हो सकती है। इसलिए, भले ही आप 'चेक करें तो डालें' कर रहे हैं, फिर भी आप डालने पर अपवाद हैंडलिंग चाहते हैं और यदि आप पहले से ही अपवाद हैंडलिंग कर रहे हैं तो आप प्रारंभिक जांच से भी दूर हो सकते हैं।
-
यदि आपका कोड संग्रहीत प्रक्रिया नहीं है और नेटवर्क के माध्यम से डेटाबेस के साथ इंटरैक्ट करना है (यानी एप्लिकेशन और डीबी एक ही बॉक्स पर नहीं हैं), तो आप दो अलग नेटवर्क कॉल (चेक के लिए एक और अन्य डालने के लिए) और इसे अपवाद हैंडलिंग के माध्यम से करना एक ही नेटवर्क कॉल के साथ पूरी चीज़ को संभालने का एक सीधा तरीका प्रदान करता है। अब, दूसरी नेटवर्क कॉल से बचते हुए 'चेक फिर इंसर्ट' विधि करने के कई तरीके हैं, लेकिन अपवाद को पकड़ना इसके बारे में जाने का सबसे आसान तरीका होने की संभावना है।
दूसरी ओर, अपवाद से निपटने के लिए एक अद्वितीय बाधा (जो वास्तव में एक अद्वितीय सूचकांक है) की आवश्यकता होती है, जो एक प्रदर्शन ट्रेडऑफ़ के साथ आता है:
- एक अद्वितीय बाधा बनाना बहुत बड़ी तालिकाओं पर धीमा होगा और यह उस तालिका में प्रत्येक सम्मिलित पर एक प्रदर्शन हिट का कारण बन जाएगा। वास्तव में बड़े डेटाबेस पर आपको बाधा को लागू करने के लिए उपयोग किए जाने वाले अद्वितीय इंडेक्स द्वारा खपत अतिरिक्त डिस्क स्थान के लिए भी बजट करना पड़ता है।
- दूसरी ओर, यदि आपके प्रश्न उस अनुक्रमणिका का लाभ उठा सकते हैं, तो यह तालिका से चयन को तेज़ी से कर सकता है।
मैं यह भी नोट करूंगा कि यदि आप ऐसी स्थिति में हैं जहां आप वास्तव में क्या करना चाहते हैं तो 'अपडेट और इंसर्ट' है (यानी यदि अद्वितीय मान वाला रिकॉर्ड पहले से मौजूद है तो आप उस रिकॉर्ड को अपडेट करना चाहते हैं, अन्यथा आप एक नया डालें रिकॉर्ड) तो आप वास्तव में जो उपयोग करना चाहते हैं वह आपके विशेष डेटाबेस की यूपीएसईआरटी विधि है, यदि इसमें एक है। SQL सर्वर और Oracle के लिए, यह एक MERGE स्टेटमेंट होगा।