दिलचस्प पोस्ट
अभी तक एक और getView कई बार कहा जाता है सेलेरी में कार्य स्थिति की जांच कैसे करें? जावा के माध्यम से एक मौजूदा फ़ाइल में पाठ डालना Linux / Unix पर स्थायी रूप से $ PATH कैसे सेट करें? सी # और जावा में जेनेरिक के बीच अंतर क्या है … और सी ++ में टेम्पलेट्स? क्या file_get_contents () में समयबाह्य सेटिंग है? FindViewById vsView धारक पैटर्न ListView एडाप्टर में क्या संग्रह हमेशा आवंटित या कभी-कभी आवंटित ढेर होता है? जावास्क्रिप्ट लूप: के लिए … बनाम के लिए MySQL में "संपूर्ण शब्द मिलान" खोजें सी # में महत्वपूर्ण आंकड़ों के साथ स्वरूपण संख्या रूबी में स्ट्रिंग कन्टेनटेनेशन एक डेटा का उपयोग करना subsetting! = <कुछ गैर-एनए> भी नहीं भी शामिल है उसी शाखा में दो अलग-अलग कोंट्स के बीच एक ही फाइल को कैसे अलग करना है? विजुअल स्टूडियो इंटरनेट एक्सप्लोरर के बजाय डिफ़ॉल्ट ब्राउज़र खोलता है

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

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

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

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

वेब के समाधान से एकत्रित समाधान "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 के साथ पूरी तरह सहमत मैं यह कहना चाहता हूं कि जब आपकी मेज बड़ी होती है, और आप जीआईआईएनएस का प्रयोग करते हुए जॉन्स के साथ चयन करते हैं, विशेष रूप से व्युत्पन्न तालिकाओं के साथ, प्रदर्शन को कम कर सकते हैं।