क्या SQL सर्वर 2000 दिनों से एक मिथक एक वृद्धिशील कुंजी के आधार पर एक संकुल सूचकांक बनाने से बचें?


22

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

SQL Server 6.0 के दिनों में डेटाबेस का विकास शुरू हुआ।

शुरू से पालन किए गए नियमों में से एक था, एक वृद्धिशील कुंजी के आधार पर क्लस्टर इंडेक्स बनाने से बचें , जैसा कि आप इन इंडेक्स ऑप्टिमाइज़ेशन टिप्स में पाते हैं ।

अब SQL Server 2005 और SQL सर्वर 2008 का उपयोग करते हुए, मुझे लगता है कि परिस्थितियों में बदलाव आया है। इस बीच, ये प्राथमिक कुंजी कॉलम तालिका के संकुल सूचकांक के लिए एकदम सही पहले उम्मीदवार हैं।

जवाबों:


34

मिथक SQL सर्वर 6.5 से पहले वापस चला जाता है, जिसमें पंक्ति स्तर लॉकिंग जोड़ा गया है । और यहां पर केलेन डेलाने ने संकेत दिया ।

यह डेटा पेज के उपयोग के "हॉट स्पॉट" के साथ करना था और यह तथ्य कि पूरे 2k पेज (SQL सर्वर 7 और उच्च उपयोग 8k पेज) को लॉक किया गया था, बल्कि तब एक सम्मिलित पंक्ति संपादित करें, Feb 2012

किम्बर्ली एल ट्रिप द्वारा आधिकारिक लेख मिला

"क्लस्टर इंडेक्स डिबेट जारी है ..."

हॉटस्पॉट्स कुछ ऐसा था जिसे हमने पेज लेवल लॉकिंग के कारण PRIOR to SQL Server 7.0 से बचने की बहुत कोशिश की (और यह वह जगह है जहाँ हॉट स्पॉट एक नकारात्मक शब्द बन गया है)। वास्तव में, यह एक नकारात्मक शब्द नहीं है। हालाँकि, चूंकि भंडारण इंजन को खोजा / पुन: डिज़ाइन किया गया था (SQL Server 7.0 में) और अब इसमें सच्ची पंक्ति स्तर लॉकिंग शामिल है, इसलिए यह प्रेरणा (हॉटस्पॉट से बचने के लिए) अब नहीं है।

संपादित करें, मई 2013

भाग्यशाली 7_2000 के उत्तर की लिंक से लगता है कि हॉटस्पॉट मौजूद हो सकते हैं और वे मुद्दों का कारण बनते हैं। हालाँकि, लेख TranTime पर एक गैर-अद्वितीय क्लस्टर इंडेक्स का उपयोग करता है। इसके लिए एक विशिष्ट जोड़ने की आवश्यकता है। जिसका अर्थ है कि सूचकांक सख्ती से नीरस रूप से नहीं बढ़ रहा है (और बहुत व्यापक है)। उस उत्तर का लिंक इस उत्तर या मेरे लिंक का खंडन नहीं करता है

एक व्यक्तिगत स्तर पर, मैंने उन डेटाबेसों पर ध्यान दिया है, जहाँ मैंने दसियों हज़ार पंक्तियों को प्रति सेकंड एक तालिका में सम्मिलित किया है, जिसमें बिग पीके के रूप में एक बड़ी पहचान का कॉलम है।


23

यह योग करने के लिए, आधुनिक SQL सर्वर संस्करणों में एक पहचान स्तंभ पर एक संकुल कुंजी इन दिनों पसंदीदा विकल्प है।


लघु, सरल, इस बिंदु पर तो यह मेरी +1 हो जाता है। SQLSkills के लिंक की जाँच अवश्य करें क्योंकि वहाँ अच्छी जानकारी का खजाना है।
एंड्रयूज

12
यह एक आदेश की तरह लगता है। कोई स्पष्टीकरण या तर्क नहीं कि हमें क्यों करना चाहिए ...
gbn

न केवल यह एक आदेश की तरह लगता है, यह भी गलत है। यदि आप अनुक्रमिक कुंजियों का उपयोग करते हैं, तो बहुत अधिक मात्रा में आवेषण / सेकंड लेने वाला कोई भी डेटाबेस हॉटस्पॉट के मुद्दों से टकराएगा।
थॉमस केजर

1
मैंने कहा पसंद किया, आवश्यकता नहीं। दुनिया में 98% डेटाबेस बनाने वाले सामान्य अनुप्रयोगों के लिए, एक पहचान कॉलम पर क्लस्टर की गई कुंजी ठीक काम करती है।
mrdenny

10

किम्बर्ली ट्रिप के पास इस विषय पर एक शानदार ब्लॉग पोस्ट है। मैं विरोधाभास कर सकता था, लेकिन मुझ पर भरोसा रखो, मैं इसे न्याय नहीं करूंगा। पढ़ लिया है। http://www.sqlskills.com/BLOGS/KIMBERLY/post/Ever-increasing-clustering-key-the-Clustered-Index-Debateagain!.aspx

वहाँ रहते हुए, क्लस्टरिंग कुंजियों के विषय पर उसके कुछ अन्य पदों की जाँच करें। उसकी साइट से ज्ञान का एक अच्छा धन है।


4

इस पोस्ट की जाँच करें:

http://blogs.msdn.com/b/sqlserverfaq/archive/2010/05/27/monotonically-increasing-clustered-index-keys-can-cause-latch-contention.aspx

एक वृद्धिशील कुंजी के आधार पर क्लस्टर इंडेक्स बनाने से प्रदर्शन के लिए खराब हॉट स्पॉट बन सकते हैं ...


1
उस लिंक को देने के लिए +1। वहाँ कुछ दिलचस्प संकेत हैं। लेकिन मुझे लगता है कि परिणाम बहुत अधिक समझाने वाला होगा, अगर उसने दिए गए परिदृश्य की तुलना tblTransactions (TranTime) या कुछ अन्य विकल्प पर nonclustered index cidx_trantime बनाने के साथ की है। याद रखें जब आप इस तरह के बहुत सारे डेटा उत्पन्न करते हैं, तो डेटा को पुनः प्राप्त करने के लिए कुशल तरीके होने चाहिए, आप हर चीज़ को एक ढेर में नहीं फेंक सकते।
bernd_k

@bernd_k: यह एक खराब उदाहरण लिंक है। बच्चे की मेज में एक खराब गैर-अद्वितीय गुच्छेदार कुंजी होती है जिसके लिए एक आंतरिक नास्तिक की आवश्यकता होती है
gbn

1
इस प्रयोग को तब आजमाएँ
थॉमस केजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.