मेरे काम पर, हम यूयूआईडी को पीके के रूप में उपयोग करते हैं। जो मैं आपको अनुभव से बता सकता हूं वह है उन्हें पीके के रूप में उपयोग न करें (वैसे SQL सर्वर)।
यह उन चीजों में से एक है कि जब आपके पास 1000 से कम रिकॉर्ड होते हैं, तो ठीक है, लेकिन जब आपके पास लाखों होते हैं, तो यह सबसे बुरी चीज है जो आप कर सकते हैं। क्यों? चूंकि यूयूआईडी अनुक्रमिक नहीं है, इसलिए हर बार एक नया रिकॉर्ड डाला जाता है एमएसएसक्यूएल को रिकॉर्ड डालने के लिए सही पृष्ठ पर जाने की जरूरत है, और फिर रिकॉर्ड डालें। इसके साथ वास्तव में बदसूरत परिणाम यह है कि पृष्ठ सभी अलग-अलग आकारों में समाप्त होते हैं और वे खंडित हो जाते हैं, इसलिए अब हमें समय-समय पर डी-फ्रैगमेंटेशन करना होगा।
जब आप एक ऑटोइनक्रिकमेंट का उपयोग करते हैं, तो MSSQL हमेशा अंतिम पृष्ठ पर जाएगा, और आप समान आकार के पृष्ठों (सिद्धांत रूप में) के साथ समाप्त होते हैं, इसलिए उन अभिलेखों का चयन करने का प्रदर्शन बहुत बेहतर होता है (यह भी क्योंकि INSERT तालिका/पृष्ठ को अवरुद्ध नहीं करेगा इतना लंबा)।
हालांकि, यूयूआईडी को पीके के रूप में इस्तेमाल करने का बड़ा फायदा यह है कि अगर हमारे पास डीबी के क्लस्टर हैं, तो विलय के समय कोई विरोध नहीं होगा।
मैं निम्नलिखित मॉडल की सिफारिश करूंगा:1. पीके आईएनटी आइडेंटिटी2. अतिरिक्त कॉलम स्वचालित रूप से UUID के रूप में उत्पन्न होता है।
इस तरह, मर्ज प्रक्रिया संभव है (यूयूआईडी आपकी असली कुंजी होगी, जबकि पीके कुछ अस्थायी होगा जो आपको अच्छा प्रदर्शन देता है)।
नोट:यह सबसे अच्छा समाधान NEWSEQUENTIALID (जैसे मैं टिप्पणियों में कह रहा था) का उपयोग करना है, लेकिन विरासत ऐप के लिए रिफैक्टर के लिए ज्यादा समय नहीं है (और इससे भी बदतर, सभी प्रविष्टियों को नियंत्रित नहीं करना), ऐसा करना संभव नहीं है। लेकिन वास्तव में 2017 तक, मैं कहूंगा कि यहां सबसे अच्छा समाधान NEWSEQUENTIALID है या NHibernate के साथ Guid.Comb कर रहा है।
आशा है कि यह मदद करता है