दिलचस्प पोस्ट
एमवीवीएम पैटर्न का उपयोग करके प्रगति पट्टी को कैसे लागू किया जाए स्विफ्ट में एक SQLite डाटाबेस तक पहुंच jQuery। पर काम नहीं करता है लेकिन NHibernate – बहुत से कई जंक्शन / जॉइनर टेबल का उपयोग कर क्वेरी प्रॉक्सी के पीछे डॉकर छवियों को डाउनलोड नहीं किया जा सकता जावास्क्रिप्ट में ब्राउज़र का "ज़ूम" इवेंट पकड़ो डुप्लिकेट पंक्तियाँ समेकित करें जांचें कि UITextField के लिए इनपुट केवल संख्यात्मक है Matlotlib में एक दूसरे एक्स-एक्स जोड़ने के लिए CSS त्रिकोण कैसे काम करते हैं? क्या सूची बनाई जा सकती है जो स्वयं नाम के आधार पर इनपुट ऑब्जेक्ट नाम है? रेल की तरफ रूबी में स्ट्रिंग संख्या है या नहीं PHP SimpleXML आंतरिक XML प्राप्त करें सी ++ में कन्स्ट्रक्टर और = ऑपरेटर ओवरलोड कॉपी करें: क्या एक आम समारोह संभव है? शब्दों को किसी संख्या में कैसे परिवर्तित करें?

INT बनाम डेटाबेस में आईडी फ़ील्ड के लिए अद्वितीय पहचानकर्ता

मैं SQL सर्वर 2005 (संभवतः SQL सर्वर 2008 निकट भविष्य में) का उपयोग कर एक वेब साइट के लिए एक नया डेटाबेस बना रहा हूं। एक एप्लिकेशन डेवलपर के रूप में, मैंने कई डेटाबेस देखे हैं जो एक तालिका के आईडी फ़ील्ड के लिए एक integer (या bigint आदि) का उपयोग करते हैं जो रिश्तों के लिए उपयोग किया जाएगा। लेकिन हाल ही में मैंने एक आईडी फ़ील्ड के लिए unique identifier ( GUID ) का उपयोग करने वाले डेटाबेस भी देखे हैं I

मेरा प्रश्न यह है कि दूसरे के पास एक फायदा है? क्या क्वेरी को पूरा करने और जुड़ने आदि के लिए फ़ील्ड integer बढ़ेगी?

अद्यतनः यह स्पष्ट करने के लिए, यह तालिकाओं में प्राथमिक कुंजी के लिए है

Solutions Collecting From Web of "INT बनाम डेटाबेस में आईडी फ़ील्ड के लिए अद्वितीय पहचानकर्ता"

उच्च यादृच्छिकता के कारण GUIDs क्लस्टर्ड कुंजी के रूप में समस्याग्रस्त हैं इस मुद्दे को पॉल टेक्नट मैगज़ीन क्यू एंड ए कॉलम में पॉल रान्डल द्वारा संबोधित किया गया था: मैं क्लस्टर इंडेक्स कुंजी के रूप में एक GUID का उपयोग करना चाहता हूं, लेकिन अन्य यह तर्क दे रहे हैं कि यह इंडेक्सस के साथ प्रदर्शन समस्याएं पैदा कर सकता है। क्या यह सच है और, यदि हां, तो आप क्यों समझा सकते हैं?

अब ध्यान रखें कि चर्चा विशेष रूप से संकुल अनुक्रमित के बारे में है। आप कहते हैं कि आप 'आईडी' के रूप में कॉलम का उपयोग करना चाहते हैं, जो स्पष्ट नहीं है यदि आप इसे क्लस्टर किए गए कुंजी या सिर्फ प्राथमिक कुंजी के रूप में कहते हैं आम तौर पर दो ओवरलैप, इसलिए मुझे लगता है कि आप इसका उपयोग क्लस्टर किए गए सूचकांक के रूप में करना चाहते हैं। जिन कारणों से मुझे एक गरीब विकल्प चुना गया है, उनके बारे में मैंने ऊपर वर्णित आलेख के लिंक में समझाया है।

गैर संकलित अनुक्रमितों के लिए GUID के पास अभी भी कुछ समस्याएं हैं, लेकिन जब तक वे टेबल के बाएं चीफ क्लस्टर कुंजी नहीं हैं, तब तक जितनी बड़ी नहीं हैं फिर से, GUIDs की यादृच्छिकता पृष्ठ विभाजन और विखंडन का परिचय देती है, इसे केवल गैर-संकुचित सूचकांक स्तर पर (बहुत छोटी समस्या) होनी चाहिए।

GUID उपयोग के आस-पास कई शहरी किंवदंतियां हैं जो उनके आकार (16 बाइट्स) के आधार पर इंट (4 बाइट) की तुलना में निंदा करती हैं और यदि वे उपयोग की जाती हैं तो भयानक प्रदर्शन कयामत का वादा करता है। यह थोड़ा अतिशयोक्तिपूर्ण है आकार 16 की एक कुंजी, एक अच्छी तरह से डिजाइन किए गए डेटा मॉडल पर अभी भी एक बहुत ही बढ़िया कुंजी हो सकती है। हालांकि यह सच है कि इंडेक्स में कम घनत्व वाले गैर-पान पृष्ठों में इंट के रूप में 4 गुणा बड़ा है, यह बड़ी संख्या में तालिकाओं के लिए एक वास्तविक चिंता नहीं है बी-ट्री संरचना एक स्वाभाविक रूप से संतुलित वृक्ष है और वृक्ष ट्रांस्पोर्टल की गहराई शायद ही कभी एक मुद्दा है, इसलिए GUID कुंजी के आधार पर मान की मांग करना क्योंकि आईएनटी कुंजी के विपरीत प्रदर्शन में समान है। एक पान-पृष्ठ ट्रवर्सल (यानी एक टेबल स्कैन) गैर-पान के पृष्ठों को नहीं देखती है, और पृष्ठ के आकार पर GUID आकार का असर काफी छोटा है, क्योंकि रिकॉर्ड ही अतिरिक्त 12 बाइट्स की तुलना में काफी बड़ा है GUID द्वारा इसलिए मैं '16 बाइट्स बनाम 4' के आधार पर सुनने की सलाह लेता हूं, बल्कि बड़ी मात्रा में, नमक का अनाज। मामले से अलग-अलग मामलों का विश्लेषण करें और तय करें कि आकार के असर से वास्तविक फर्क पड़ता है: तालिका में कितने अन्य स्तंभ हैं (यानी पृष्ठ पन्नों पर कितना असर पड़ता है GUID का आकार) और कितने संदर्भ इसका प्रयोग कर रहे हैं (यानी। कितने अन्य तालिकाओं में वृद्धि होगी क्योंकि वे एक बड़ी विदेशी कुंजी को संग्रहित करने की आवश्यकता है)

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

और अंत में, अपने प्रश्न का उत्तर देने के लिए: यदि आपके पास GUID का उपयोग करने का एक विशिष्ट कारण नहीं है, तो INTs का उपयोग करें

GUID अधिक स्थान ले जा रहा है और एक इंट से धीमा हो सकता है – भले ही आप नयेवर्तीय () फ़ंक्शन का उपयोग करें। यदि आप प्रतिकृति करने जा रहे हैं या सिंक फ्रेमवर्क का उपयोग कर रहे हैं तो आपको बहुत ज्यादा एक गाइड का उपयोग करना होगा।

INTs 4 बाइट्स हैं, BIGINTs AR 8 बाइट्स, और GUIDs 16 बाइट्स हैं। डेटा का प्रतिनिधित्व करने के लिए आवश्यक अधिक स्थान, इसे संसाधित करने के लिए आवश्यक अधिक संसाधन – डिस्क स्थान, मेमोरी, आदि। इसलिए (ए) वे धीमी गति से हैं, लेकिन (बी) यह शायद ही महत्वपूर्ण है अगर मात्रा एक मुद्दा है (लाखों पंक्तियाँ, या हजारों लेनदेन बहुत, बहुत कम समय में।)

GUID का लाभ यह है कि वे (बहुत ज्यादा) विश्व स्तर पर अद्वितीय हैं उचित एल्गोरिथ्म (और SQL सर्वर xxxx सही एल्गोरिथम का उपयोग करेगा) का उपयोग करके एक गइड जनरेट करें, और कोई भी दो ग्रिड कभी भी एक जैसा नहीं होगा – चाहे कितने कंप्यूटर आप उन्हें पैदा करते हैं, चाहे कितनी भी बार। (यह उपयोग के 72 वर्षों के बाद लागू नहीं होता है – मैं विवरण भूल जाता हूं।)

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

यदि आप सकारात्मक, बिल्कुल एक अद्वितीय आईडी है, तो GUID। इसका अर्थ है कि यदि आप कभी भी मर्ज, समन्वयन, दोहराना चाहते हैं, तो शायद आपको GUID का उपयोग करना चाहिए।

कम मजबूत चीज़ों के लिए, एक इंट, तालिका के बड़े होने के आधार पर पर्याप्त होना चाहिए

ज्यादातर मामलों में, उचित उत्तर है, यह निर्भर करता है।

प्रतिकृति आदि के लिए उन्हें प्रयोग करें, प्राथमिक कुंजी के रूप में नहीं

किम्बरली एल ट्रिप लेख

  • के खिलाफ: अंतरिक्ष, सख्ती से मोनोटोनिक नहीं, पृष्ठ विभाजन, बुकमार्क / आरआईडी आदि
  • के लिए: एर …

JBrooks के साथ पूरी तरह सहमत मैं यह कहना चाहता हूं कि जब आपकी मेज बड़ी होती है, और आप जीआईआईएनएस का प्रयोग करते हुए जॉन्स के साथ चयन करते हैं, विशेष रूप से व्युत्पन्न तालिकाओं के साथ, प्रदर्शन को कम कर सकते हैं।