मैं अपनी कंपनी शुरू होने वाले नए डेटाबेस के लिए डेटाबेस मानकों पर काम कर रहा हूं। जिन चीज़ों को हम परिभाषित करने की कोशिश कर रहे हैं उनमें से एक अद्वितीय कुंजी और क्लस्टरर्ड इंडेक्स नियमों को अनन्य इंडेंटिफायर के संबंध में है।अनन्य इंडेंटिफायर क्लस्टर्ड इंडेक्स पर नया अनुक्रमिक आईडी
(नोट:।। मैं पेशेवरों और एक UniqueIdentifier एक प्राथमिक कुंजी या क्लस्टर सूचकांक के रूप में उपयोग करने का विपक्ष पर चर्चा नहीं करना चाहते हैं उस के बारे में वेब पर जानकारी का एक टन है यह नहीं कि चर्चा है।
मैं क्लस्टर सूचकांक और प्राथमिक कुंजी के रूप में एक UniqueIdentifier के साथ एक मेज है कहते हैं:)
तो यहाँ परिदृश्य है कि मुझे चिंतित है। चलिए इसे कोला कहते हैं। मैंने कोला के लिए डिफ़ॉल्ट मान को NewSequentialId() सेट किया है।
का उपयोग करना है कि NewSequentialId() मैं तीन अनुक्रमिक पंक्तियां सम्मिलित:
{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3- 440D-A9FE-CC7988DDF067}
फिर मैं अपने सर्वर को रीबूट करता हूं। docs for NewSequentialId कहता है कि "विंडोज को पुनरारंभ करने के बाद, GUID एक निम्न सीमा से फिर से शुरू हो सकता है, लेकिन अभी भी वैश्विक स्तर पर अद्वितीय है।"
तो अगला प्रारंभिक बिंदु पिछले सीमा से कम हो सकता है।
{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-:
तो पुनः आरंभ करने के बाद, मुझे 3 अधिक मान सम्मिलित 4645-ABA9-B098D2003E66}
(मुझे यकीन नहीं है कि डेटाबेस में ग्रिड का प्रतिनिधित्व कैसे किया जाता है, लेकिन मान लें कि यह 3 से शुरू होता है और पिछले 7 के साथ शुरू होता है कि 3 लोग "छोटे" होते हैं 7 वाले।)
जब आप एक सम्मिलित करते हैं क्लस्टर्ड इंडेक्स के बीच में, इंडेक्स का रीमेपिंग होना होता है। (कम से कम मेरे डीबीए ने मुझे बताया है।) और हर बार जब मैं रीबूट करता हूं तो मैं अपनी नई अनन्य इंडेंटिफायर रेंज को अन्य पिछली श्रेणियों के बीच में सही होने का जोखिम चलाता हूं।
तो मेरा सवाल यह है: चूंकि अनन्य इंडेंटिफायर का अगला सेट अंतिम सेट से छोटा होगा, क्या प्रत्येक डालने से मेरा क्लस्टर इंडेक्स शफल हो जाएगा?
और यदि नहीं, तो क्यों? क्या SQL सर्वर जानता है कि मैं NewSequentialId का उपयोग कर रहा हूं? क्या कुछ इसके लिए कितना क्षतिपूर्ति करता है?
यदि नहीं, तो यह कैसे पता चलेगा कि मैं आगे क्या सम्मिलित करूंगा? शायद अगले मिलियन आवेषण 3 से शुरू होंगे। या शायद वे 7 से शुरू होंगे। यह कैसे पता चलता है?
या यह नहीं जानता है और बस सबकुछ क्रम में रखता है। यदि ऐसा है तो एक रीबूट बड़े पैमाने पर प्रदर्शन को प्रभावित कर सकता है। (जो मुझे लगता है कि मुझे अपने स्वयं के कस्टम न्यूसक्वेंशियल आईडी की आवश्यकता है जो रीबूट से प्रभावित नहीं है।) क्या यह सही है? या क्या कोई जादू है जिसके बारे में मुझे पता नहीं है?
संपादित करें: क्लस्टर सूचकांक के रूप में GUID मेरे मानक में दृढ़ता से निराश है। जैसा कि मैंने उपरोक्त कहा है, ऐसे कई कारण हैं कि यह एक बुरा विचार है। मैं यह पता लगाने की कोशिश कर रहा हूं कि यह एक और कारण है या नहीं।
"यदि ऐसा है तो एक रीबूट बड़े पैमाने पर प्रदर्शन को प्रभावित कर सकता है।" - यही कारण है कि आप एक int पहचान() का उपयोग करना चाहते हैं, भले ही आप इसे सुनना नहीं चाहते हैं। – HardCode