2010-08-31 6 views
8

मैं एसक्यूएल सर्वर एक्सप्रेस 2008 आर 2 में जेट डेटाबेस को अपनाना चाहता हूं और ऐसा करने से पहले, मैं स्कीमा का फिर से मूल्यांकन कर रहा हूं (इसे 1 997-9 8 में डिजाइन किया गया था, और वह लड़का जो इसे डिजाइन किया गया (यानी, मुझे) एक मूर्खता का कुछ था!)।एसक्यूएल सर्वर समग्र कुंजी के व्यक्तिगत फ़ील्ड इंडेक्सिंग

मेरा प्रश्न एन-एन दो कॉलम समग्र कुंजी के साथ तालिकाओं में शामिल है। जेट में, दो कॉलम समग्र कुंजी के पहले कॉलम में शामिल होने पर समग्र इंडेक्स का उपयोग किया जाएगा, लेकिन दूसरे कॉलम में शामिल होगा, सामान्य रूप से, जेट डेटाबेस में बड़े एन: एन के साथ बड़ी संख्या में रिकॉर्ड्स के साथ टेबल में शामिल हों , समग्र सूचकांक के अतिरिक्त मैं दूसरे कॉलम पर एक दूसरी, गैर-अद्वितीय अनुक्रमणिका जोड़ता हूं।

क्या यह SQL सर्वर में एक अच्छा विचार है?

(शायद यह जेट में एक अच्छा विचार नहीं है?)

उत्तर

14

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

+0

स्पष्ट सूचकांक रखरखाव के मुद्दों के अलावा कोई भी नकारात्मक पक्ष? सूचकांक भंडारण के लिए –

+2

अंतरिक्ष विचार। डालें/अपडेट/हटाएं ऑपरेशन पर अतिरिक्त ओवरहेड। कॉलम बी की कार्डिनिटी पर भी विचार करें। यदि यह कम कार्डिनालिटी (कुछ अद्वितीय मूल्य) है, तो सूचकांक उतनी मदद नहीं कर सकता है। –

+0

सामान्य रूप से, मेरे कॉलमब में कम कार्डिनालिटी है जो कॉलम ए है। उन्हें उलट देगा और कॉलम पर गैर-डुप्लिकेट इंडेक्स को उच्च कार्डिनिटी के साथ जोड़ना अधिक कुशल होगा? –

5

आप स्तंभों (A,B) नहीं चाहते हैं, रेंज स्कैन पर एक समग्र सूचकांक है, तो तरह या कुल आपरेशन भाव कि केवलB शामिल के लिए उपयोग कर सकते हैं। यह SQL सर्वर के लिए सच है, जैसे कि जेट (लाल) ड्राइवरों के लिए यह सच था (और मुझे लगता है कि Jet Blue भी)। कुछ अन्य इंजन इसे skip scan ऑपरेशन में उपयोग कर सकते हैं।

तो जवाब यह है कि आपको अकेले (B) पर अलग इंडेक्स की आवश्यकता है।

+0

यदि तालिका का उपयोग अधिकतर कॉलम पर जुड़ने के साथ किया जाता है, तो क्या यह उस चयन में मदद करेगा, जो कि चयन में केवल दूसरे कॉलम का उपयोग करके चयन में होगा? मेरी सोच यह है कि ऑप्टिमाइज़र उस तरफ से पहले चयन करने जा रहा है जिसमें एक इंडेक्स है और उसके बाद दूसरी तरफ कम करना है, इसलिए दोनों शामिल होने के साथ ही यह अनइंडेक्ड पक्ष में शामिल होने के मुकाबले ज्यादा कुशल होगा। चूंकि मैं कभी भी दोनों शामिल होने के बिना टेबल में शामिल होने का उपयोग करता हूं, शायद यह ज्यादा मदद नहीं करेगा? –

+0

यदि दोनों कॉलम पर शामिल है तो अकेले '(बी) 'पर सूचकांक को अनदेखा कर दिया जाएगा। लेकिन यदि आप ज्यादातर 'ए' और' बी 'पर खोज/जुड़ते हैं, * कभी-कभी * अकेले * बी' पर अकेले * कभी * ए * पर नहीं * तो आप इंडेक्स को '(बी, ए)' पर बदलने पर विचार कर सकते हैं। बजाय। –

+0

एक सामान्य नियम के रूप में, किसी सूचकांक में कॉलम ऑर्डर बढ़ती चुनिंदाता क्रम में होना चाहिए, जब तक कि विशिष्ट 'ऑर्डर बी' को संबोधित करने की आवश्यकता न हो।बाईं तरफ कम चयनशीलता कॉलम डालने से कुल और बड़ी रेंज पूछताछ के लिए सूचकांक का उपयोग करने की अनुमति मिलती है, लेकिन चेतावनी दी जाती है कि कम चयनशीलता कॉलम भी तेजी से टिपिंग प्वाइंट जाल में गिर जाएगा: http://www.sqlskills.com/BLOGS /KIMBERLY/category/The-Tipping-Point.aspx। बाएं कोने पर कम चयनशीलता कॉलम (जैसे 'टाइप') होने से क्लस्टर्ड इंडेक्स पर अधिकतर अर्थ होता है क्योंकि क्लस्टर इंडेक्स हमेशा कवर होते हैं, टिपिंग पॉइंट नहीं होते हैं। –

4

मैनेजमेंट स्टूडियो का उपयोग करके SQL सर्वर में बस एक और युक्ति, आपकी सहायता करने के लिए आप "अनुमानित निष्पादन योजना प्रदर्शित करें" द्वारा प्रदर्शन का मूल्यांकन कर सकते हैं। यह दिखाता है कि इंडेक्स और जॉइन कैसे काम करता है।

इसके अलावा आप अधिक जानकारी और अनुकूलन के लिए डीटीए (डाटाबेस इंजन ट्यूनिंग सलाहकार) का उपयोग कर सकते हैं।

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