2009-08-22 9 views
5

हम एक एसक्यूएल सर्वर 2008 डीबी में लेखा परीक्षा के लिए एक एकल तालिका के साथ प्रयोग कर रहे हैं एसक्यूएल तेजी से सम्मिलित करता है।कोई अद्यतन

एकल तालिका वास्तुकला अच्छी तरह से काम करता है,, क्वेरी करने के लिए सरल है स्कीमा परिवर्तन रह सकते हैं।

लेकिन यह पूरी डीबी के लिए एक प्रमुख अड़चन है। सभी इंसर्ट्स और अपडेट्स को ऑडिट टेबल के माध्यम से जाना होगा।

हम पहले से ही SELECT स्टेटमेंट्स के लिए NOLOCK संकेत का उपयोग करें।

चूंकि इस तालिका में कोई अपडेट नहीं कर रहे हैं, वहाँ सम्मिलित बयान के प्रवाह में सुधार के लिए कोई सुझाव है?

उत्तर

4

सुनिश्चित करें कि आप एक INT (या BIGINT) मेज पर पहचान प्राथमिक क्लस्टर सूचकांक बनाओ! और अधिमानतः कोई अन्य सूचकांक (यदि संभव हो) - वे आवेषण धीमा कर देंगे।

यह एक आम गलत धारणा है कि तालिका को केवल INSERT की आवश्यकता होती है और शायद ही कोई पढ़ता है, आपको प्राथमिक, क्लस्टर कुंजी की समस्या को स्वयं "सहेजना" चाहिए।

एसक्यूएल सर्वर अनुक्रमण की देवी, किम्बर्ली ट्रिप रूप में, उसके उत्कृष्ट ब्लॉग पोस्ट The Clustered Index Debate continues में बताते हैं:

आवेषण एक क्लस्टर तालिका में तेजी से (लेकिन केवल "सही" क्लस्टर तालिका में) की तुलना में कर रहे हैं ढेर की तुलना में। प्राथमिक समस्या है कि यहाँ IAM/PFS में लुकअप निर्धारित करने के लिए है एक ढेर में डालने स्थान एक संकुल तालिका (जहां डालने स्थान में जाना जाता है, क्लस्टर कुंजी द्वारा परिभाषित) की तुलना में धीमे हैं। इंसर्ट तेजी से जब एक मेज जहां आदेश परिभाषित किया गया है (सीएल) और जहां कि आदेश बढ़ती है में डाला जाता है।

तो एक सही क्लस्टर सूचकांक अपने आवेषण में तेजी लाने के कर सकते हैं और यहीं स्थिर (कभी नहीं बदलता), अद्वितीय, संभव (INT या BIGINT) के रूप में के रूप में छोटे और अच्छा होगा यदि बढ़ती मतलब है (कोई पेज विभाजन और इसलिए कोई प्रदर्शन जुर्माना नहीं)।

यदि आपकी तालिका केवल आवेषण और कोई अपडेट/हटाना नहीं है, तो आपको क्लस्टर इंडेक्स पर 100% FILFACTOR का उपयोग करना सुनिश्चित करना चाहिए ताकि वे SQL सर्वर पृष्ठों को पूरी तरह से भर सकें।

मार्क

+0

मैं इन पंक्तियों के साथ काम कर रहा हूं। मेरे पास एक पहचान क्लस्टर प्राथमिक कुंजी है ताकि अंतिम पृष्ठ में INSERT वास्तव में APPENDs हों। 100% भरने वाला फैक्टर एक नाइस स्पर्श है। मैं मासिक रखरखाव के लिए सोच रहा हूं, रिकॉर्ड को "स्थायी" इतिहास तालिका में ले जा रहा हूं, ताकि मुख्य तालिका कभी भी बड़ी न हो। – pkario

+0

ठीक है, यदि आपके पास लगातार बढ़ती हुई अनुक्रमणिका है, तो तालिका का आकार वास्तव में इतना बड़ा मुद्दा नहीं है (चयन के अलावा, स्पष्ट रूप से) –

2

केवल सिफारिशों मैं होगा हैं:

  • सुनिश्चित करें कि आप से गैर स्ट्रिंग मान लिख रहे हैं जितना संभव हो सके
  • संग्रहित प्रक्रियाओं के माध्यम से लेखा परीक्षा करने के लिए अपने लेखन को संपुटित
  • हड़पने किसी भी अन्य डेटा संग्रहीत प्रक्रिया कॉल या
  • अपने ऑडिट स्पोक में एक अलग-अलग-उद्देश्य के लिए उपयोग का उपयोग करने पर विचार करें। सुनिश्चित करें कि इसके जुड़ने जितना संभव हो उतना कम हो। यह दृश्य आपके स्ट्रिंग डेटा के लिए एफके का पता लगाने की कोशिश करते समय ऑडिट संदेशों आदि के लिए पीके के लिए लुकअप के लिए होगा।
  • कोई अनुशंसा नहीं, लेकिन एक तथ्य: कम इंडेक्स का मतलब तेज़ आवेषण + धीमी चयन है।
  • किसी अन्य तालिका में 'पुरानी' ऑडिट पंक्तियों को संग्रहीत करने पर विचार करें। ऑडिट तालिका को जितना छोटा हो सके रखें। उन पुरानी लेखापरीक्षा पंक्तियों को दूसरी तालिका में ले जाएं। रिपोर्टिंग/पूछताछ के लिए, एक दृश्य बनाएं जो join या union 'लाइव' और 'पुराना' ऑडिट होगा।
0

आप केवल लेखा परीक्षा तालिकाओं के लिए जोड़कर कर रहे हैं और रिपोर्ट है कि हमेशा तालिका स्कैन प्रदर्शन खत्म करने जा रहे हैं चलाने के लिए, मेज पर किसी भी अनुक्रमित को हटाने पर विचार करें।

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