2011-09-30 16 views
6

हम उत्पादन में कुछ भारी टेबल लॉकिंग मुद्दों से पीड़ित हैं। मैंने देखा है कि मैंने एक संग्रहीत प्रक्रिया बनाई है जो ऑर्डर नंबर द्वारा ऑर्डर की एक सूची प्राप्त करती है। ऑर्डर नंबर एक वचरर (150) है। इस कॉलम पर किसी भी प्रकार की कोई अनुक्रमणिका नहीं है।एक वर्चर पर सूचकांक?

इस समय, इस कॉलम में बहुत सारे मूल्य हैं। हालांकि, समय के साथ (यह तालिका हाल ही में लाइव हो गई), तालिका में काफी वृद्धि होगी। इस समय में कोई और मूल्य नहीं जोड़ा जाएगा।

मेरा प्रश्न दो गुना है। सबसे पहले, एक सूचकांक यहां फायदेमंद होगा। Proc का भारी उपयोग किया जाता है। और यदि हां, तो इसे क्लस्टर किया जाना चाहिए या नहीं? डेटा सीपी 123456, डीआर 126512 जैसी चीजें हैं।

दूसरा प्रश्न, जो शायद पहले प्रश्न को प्रभावित करता है - क्या कॉलम को एक CHAR (10) में बदलने के लिए फायदेमंद होगा, क्योंकि ऐसा लगता है कि आदेश संख्या हमेशा एक ही आकार है। एक वर्चर (150) के विपरीत, एक निश्चित लंबाई CHAR पर एक इंडेक्स डालने में कोई गति लाभ है?

(स्तंभ में बनाया गया था जब आकार में अलग अज्ञात आवश्यकताओं के कारण है)।

एसक्यूएल सर्वर 2008.

उत्तर

6
  1. हाँ, बिल्कुल! आगे बढ़ें और एक इंडेक्स जोड़ें। इंडेक्स को क्लस्टर करना शायद अनावश्यक है, और यदि आपके पास पहले से ही एक और क्लस्टर्ड इंडेक्स (जैसे प्राथमिक कुंजी) है तो तालिका में संभव नहीं होगा।

  2. कॉलम को CHAR(10) में बदलना भंडारण आकार के संदर्भ में कुछ लाभ हो सकता है, लेकिन सूचकांक प्रदर्शन में विशेष रूप से एक बड़ा अंतर बनाने की संभावना नहीं है। मैं इसे अभी छोड़ दूंगा।

+1

आप निश्चित रूप से एमएस एसक्यूएल सर्वर में गैर-क्लस्टर प्राथमिक कुंजी रख सकते हैं। – MatBailie

2

मेरे पास इस पर उद्धरण के संदर्भ नहीं हैं, केवल अनुभव/अचूक सबूत हैं।


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


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

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


संक्षेप में, अपने डेटा निश्चित रूप से सूचकांक। और क्लस्टर्ड इंडेक्स आमतौर पर आपके सबसे खराब प्रदर्शन प्रश्नों को पूरा करने के लिए सबसे अच्छा रखा जाता है।


VARCHAR और CHAR के बीच अंतर के रूप में? पुराने दिनों में निश्चित लंबाई फ़ील्ड को पहचानने के लिए आसान बनाने के लिए, अपने डेटा के अंत में परिवर्तनीय लंबाई फ़ील्ड रखना महत्वपूर्ण था। इसका मतलब था कि एक वर्चर फ़ील्ड आपके पहले क्षेत्र के रूप में है, और इसे एक अद्वितीय पहचानकर्ता के रूप में उपयोग करना बहुत खराब था।

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

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