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

INSERT . से पहले UNIQUE बाधा बनाम जाँच

मुझे लगता है कि ज्यादातर मामलों में उन दोनों के बीच का अंतर इतना छोटा होने वाला है कि पसंद को ज्यादातर उस कार्यान्वयन को चुनकर संचालित किया जाना चाहिए जो पहली बार कोड को देखने वाले किसी व्यक्ति के लिए सबसे अधिक समझ में आता है।

हालांकि, मुझे लगता है कि अपवाद प्रबंधन में कुछ छोटा है फायदे:

  • एक्सेप्शन हैंडलिंग संभावित रेस कंडीशन से बचाती है। यदि कोई अन्य प्रक्रिया आपके चेक और आपके इंसर्ट के बीच एक रिकॉर्ड सम्मिलित करती है, तो 'चेक करें, फिर डालें' विधि विफल हो सकती है। इसलिए, भले ही आप 'चेक करें तो डालें' कर रहे हैं, फिर भी आप डालने पर अपवाद हैंडलिंग चाहते हैं और यदि आप पहले से ही अपवाद हैंडलिंग कर रहे हैं तो आप प्रारंभिक जांच से भी दूर हो सकते हैं।

  • यदि आपका कोड संग्रहीत प्रक्रिया नहीं है और नेटवर्क के माध्यम से डेटाबेस के साथ इंटरैक्ट करना है (यानी एप्लिकेशन और डीबी एक ही बॉक्स पर नहीं हैं), तो आप दो अलग नेटवर्क कॉल (चेक के लिए एक और अन्य डालने के लिए) और इसे अपवाद हैंडलिंग के माध्यम से करना एक ही नेटवर्क कॉल के साथ पूरी चीज़ को संभालने का एक सीधा तरीका प्रदान करता है। अब, दूसरी नेटवर्क कॉल से बचते हुए 'चेक फिर इंसर्ट' विधि करने के कई तरीके हैं, लेकिन अपवाद को पकड़ना इसके बारे में जाने का सबसे आसान तरीका होने की संभावना है।

दूसरी ओर, अपवाद से निपटने के लिए एक अद्वितीय बाधा (जो वास्तव में एक अद्वितीय सूचकांक है) की आवश्यकता होती है, जो एक प्रदर्शन ट्रेडऑफ़ के साथ आता है:

  • एक अद्वितीय बाधा बनाना बहुत बड़ी तालिकाओं पर धीमा होगा और यह उस तालिका में प्रत्येक सम्मिलित पर एक प्रदर्शन हिट का कारण बन जाएगा। वास्तव में बड़े डेटाबेस पर आपको बाधा को लागू करने के लिए उपयोग किए जाने वाले अद्वितीय इंडेक्स द्वारा खपत अतिरिक्त डिस्क स्थान के लिए भी बजट करना पड़ता है।
  • दूसरी ओर, यदि आपके प्रश्न उस अनुक्रमणिका का लाभ उठा सकते हैं, तो यह तालिका से चयन को तेज़ी से कर सकता है।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जेडीबीसी रेडीस्टेटमेंट में पसंद की क्वेरी का उपयोग नहीं कर सकते हैं?

  2. ओरेकल plsql:एक्सएमएल को कैसे पार्स करें और टेबल में डालें?

  3. संख्याओं की एक श्रृंखला से किसी भी लापता संख्या की जांच कैसे करें?

  4. Oracle SQL क्वेरी के साथ पहले संख्याओं के आधार पर कैसे छाँटें?

  5. Oracle में N'String' बनाम U'String' अक्षर के बीच अंतर