2009-09-24 11 views
8

मैं SQL सर्वर प्रदर्शन में काफी अच्छी तरह से जानता हूं लेकिन मुझे दृढ़ता से यह विचार करना होगा कि GUIDs को क्लस्टरड प्राथमिक कुंजी के लिए डिफ़ॉल्ट प्रकार के रूप में उपयोग किया जाना चाहिए।प्राथमिक कुंजी/क्लस्टेड इंडेक्स में GUID का उपयोग

मानते हैं कि तालिका में प्रतिदिन (5000 +/- पंक्ति/दिन) की काफी कम मात्रा में आवेषण हैं, हम किस प्रकार के प्रदर्शन मुद्दों को चला सकते हैं? पृष्ठ विभाजन कैसे हमारे खोज प्रदर्शन को प्रभावित करेगा? मुझे कितनी बार reindex (या मैं defrag चाहिए) चाहिए? मुझे भरने के कारकों को (100, 90, 80, ect) में क्या सेट करना चाहिए?

क्या होगा यदि मैं प्रति दिन 1,000,000 पंक्तियां डाल रहा था?

मैं सभी सवालों के लिए beforhand माफ़ी मांगता हूं, लेकिन मैं पीयूएस के लिए हमारे डिफ़ॉल्ट के रूप में GUID का उपयोग न करने के लिए कुछ बैकअप प्राप्त करने के लिए देख रहा हूं। हालांकि, मैं स्टैक ओवरफ्लो उपयोगकर्ता आधार से अतिव्यापी ज्ञान से अपना मन बदलने के लिए पूरी तरह से खुला हूं। GUID प्राथमिक कुंजी के रूप का उपयोग करने का

+0

शायद http://stackoverflow.com/questions/821108/clustered-non-clustered-index-on-unique-identifier-column-in-sql- सर्वर का डुप्लिकेट? –

+0

सबसे निश्चित रूप से समान है, लेकिन मैं कुछ विशिष्टताओं की तलाश में हूं - कुछ ऐसा जो भविष्य के चांदनी साधकों के लिए उपयोग किया जा सकता है। – NTDLS

उत्तर

8

आप मात्रा के किसी भी प्रकार कर रहे हैं, GUIDs एक पी बुरा के रूप में अत्यंत बुरा जब तक आप sequential GUIDs का उपयोग करें, सटीक कारण आप का वर्णन के लिए कर रहे हैं। Page fragmentation is severe:

    Average     Average 
       Fragmentation Fragment Fragment Page  Average 
Type    in Percent  Count  Size  Count Space Used 

id    4.35   7   16.43  115  99.89 
newidguid  98.77   162   1   162  70.90 
newsequentualid 4.35   7   16.43  115  99.89 

और GUIDs और पूर्णांकों के बीच this comparison के रूप में दिखाता है:

Test1 पेज विभाजन की भारी मात्रा के कारण होता है, और चारों ओर 12% एक स्कैन घनत्व था जब मैं के बाद एक DBCC SHOWCONTIG भाग गया आवेषण पूरा हो गया था। टेस्ट 2 टेबल में स्कैन घनत्व लगभग 9 8%

यदि आपकी मात्रा बहुत कम है, हालांकि, इससे कोई फर्क नहीं पड़ता।

यदि आपको वास्तव में वैश्विक रूप से अद्वितीय आईडी की आवश्यकता है लेकिन उच्च मात्रा (और अनुक्रमिक आईडी का उपयोग नहीं कर सकते) है, तो बस GUID को अनुक्रमित कॉलम में रखें।

+0

इस पॉडकास्ट में गैर-अनुक्रमिक GUID की प्राथमिक कुंजी http://www.dotnetrocks.com/default.aspx?showNum=455 जैसी समस्याओं के बारे में अच्छी बातचीत है। –

+0

औसत स्थान का उपयोग नीचे आता है .... – RCIX

+0

इसे पुनरुत्थान के लिए क्षमा चाहते हैं, लेकिन उपरोक्त लिंक टूटा हुआ है। – zer09

2

कमियां:

  • कोई सार्थक आदेश है, जिसका अर्थ अनुक्रमण प्रदर्शन को बढ़ावा देने नहीं करता है के रूप में यह एक पूर्णांक के साथ करता है।
  • एक पूर्णांक के लिए एक GUID 16 बाइट्स, बनाम 2, 4 या 8 बाइट्स का आकार।
  • मनुष्यों के लिए याद रखना बहुत मुश्किल है, इसलिए संदर्भ आईडी के रूप में कोई अच्छा नहीं है।

लाभ:

  • गैर अनुमान लगाया जा सकता प्राथमिक कुंजी है कि इसलिए कम खतरनाक जब एक वेब पेज क्वेरी स्ट्रिंग में या आवेदन में दिखाया गया है हो सकता है की अनुमति दें।
  • उन डेटाबेसों में उपयोगी जो ऑटो वृद्धि या पहचान डेटा प्रकार प्रदान नहीं करते हैं।
  • उपयोगी जब आपको प्लेटफ़ॉर्म या वातावरण में दो अलग-अलग डेटा स्रोतों के बीच डेटा में शामिल होने की आवश्यकता होती है।

मैंने सोचा कि GUID का उपयोग करना है या नहीं, लेकिन शायद मुझे अन्य मुद्दों से अनजान है।

+1

GUIDs आईडी के रूप में महत्वपूर्ण हैं जब डेटासेट या आंशिक डेटासेट को अलग-अलग स्रोतों से विलय करने की आवश्यकता हो सकती है। –

+0

@Rex, अच्छा बिंदु, मैंने इसे एक लाभ के रूप में जोड़ा है। – Ash

+0

एक पूर्व कंपनी में: हमने चाइल्डकेयर वेब-सर्विसेज चलाया और कई कंपनियां जो अलग-अलग डेटाबेस में थीं वे विलय और एकानोटर खरीद रही थीं। मुख्य डेवलपर ने पीके के लिए जीयूआईडी पर निर्णय लिया था, जिसने कंपनियों के विलय को बेहद सरल बना दिया। लोडरुनर (इंडेक्स स्कैन/चाहने पर 100% सीपीयू) द्वारा बेंचमार्क पास करने में सक्षम नहीं होने के बाद यह बिज़ से बाहर हो गया। अबाध प्रदर्शन ... – NTDLS

1

प्रतिदिन इस तरह के एक कम आवेषण के साथ, मुझे शक है कि पेज बंटवारे एक महत्वपूर्ण कारक होना चाहिए। वास्तविक सवाल यह है कि 5,000 मौजूदा पंक्ति गणना के साथ तुलना कैसे करता है, क्योंकि यह विभाजित करने के लिए उचित प्रारंभिक भरने वाले कारक पर निर्णय लेने के लिए आवश्यक मुख्य जानकारी होगी।

यह कहा गया, मैं व्यक्तिगत रूप से GUID का बड़ा प्रशंसक नहीं हूं। मैं समझता हूं कि वे कुछ संदर्भों में अच्छी तरह से सेवा कर सकते हैं लेकिन कई मामलों में वे केवल "रास्ते में" हैं, दक्षता, उपयोग की आसानी, ...

मुझे निम्न प्रश्नों को कम करने के लिए उपयोगी प्रश्न मिलते हैं यह तय करना कि GUID का उपयोग किया जाना चाहिए या नहीं।

  • क्या पीके साझा/प्रकाशित किया जाएगा? (यानी यह एसक्यूएल के भीतर अपनी आंतरिक उपयोग के परे इस्तेमाल किया जाएगा, आवेदन पत्र एक हद तक लगातार फैशन में इन कुंजियों की आवश्यकता होगी? उपयोगकर्ताओं को किसी भी तरह इन कुंजियों दिखाई देंगे?
  • पी फैले डेटा स्रोतों को मर्ज करने में मदद करने के लिए इस्तेमाल किया जा सकता है?
  • तालिका है डेटा में स्तंभ (रों) से बनाया गया एक प्राथमिक -possibly composite- है? इस कुंजी
  • कैसे प्राथमिक कुंजी क्रमित करूं यह संभव का आकार क्या है?यदि समग्र, पहले कुछ कॉलम चुनिंदा हैं?
0

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

संबंधित मुद्दे