2010-01-05 17 views
7

हाई दोस्तों,
मुझे डेटाबेस इंडेक्स कब बनाना चाहिए?

  • जब तालिका निर्माण के दौरान या प्रदर्शन ट्यूनिंग पर एक मेज (यानी) सूचकांक स्थापित करने के लिए?

  • अनुक्रमण के फायदे और नुकसान क्या हैं?

+0

डुप्लिकेट: http://stackoverflow.com/questions/107132/what-columns-generally-make-good-indexes –

+0

इसके अलावा: http://stackoverflow.com/questions/523018/when-should-you -कॉन्डर-इंडेक्सिंग-आपकी-एसक्यूएल-टेबल –

+0

पढ़ना चाहिए: http://www.sqlskills.com/BLOGS/KIMBERLY/category/The-Tipping-Point.aspx –

उत्तर

9

कई (सबसे?) डीबीएमएस उपयोग अनुक्रमित अद्वितीय समर्थन करने के लिए कर रहे हैं अद्यतन बाधाओं। अद्वितीय बाधाओं को लागू करने के लिए हमेशा इंडेक्स बनाएं; वे (बाधाएं) आपके डेटाबेस के सही संचालन के लिए महत्वपूर्ण हैं।

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

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

विशिष्टता और संदर्भित अखंडता बाधाओं के साथ निपटाया जाता है (अनुक्रमित), तो आप कुछ अन्य लोगों से लाभ उठा सकते हैं या नहीं। ध्यान से चुनें, और जितना संभव हो उतना अतिरिक्त जोड़ें (शून्य एक अच्छी संख्या है)। प्रत्येक इंडेक्स अपडेट ऑपरेशंस (अद्यतन, INSERT, DELETE) धीमा करता है, और स्टोरेज स्पेस का उपयोग करता है। इरादा यह है कि इसे प्रश्नों को तेज करके अपनी जगह जीतनी चाहिए। हालांकि, यह न भूलें कि ऑप्टिमाइज़र को प्रत्येक इंडेक्स के बारे में सोचना है और क्या यह क्वेरी का जवाब देने में उपयोगी हो सकता है, इसलिए इंडेक्स भी ऑप्टिमाइज़र को धीमा कर देता है (हालांकि आप उस प्रभाव को मापने के लिए शायद दबाएंगे)।

जब आप इंडेक्स जोड़ते हैं, तो उन्हें चुनिंदा कॉलम ('सेक्स' '' एम 'और' एफ 'युक्त' सेक्स 'पर जोड़ें, लेकिन हो सकता है कि' डब 'जिसमें 1 9 00 और 2010 के बीच जन्म की तारीखें हों, या शायद इससे भी अधिक विशिष्ट मूल्य यह विचार करें कि अतिरिक्त कॉलम अधिक प्रश्नों के उत्तर देने में मदद करेंगे या नहीं। कुछ डीबीएमएस (जैसे कि डीबी 2) अतिरिक्त कॉलम के साथ इंडेक्स प्रदान करते हैं जो विशिष्टता बाधा का हिस्सा नहीं हैं, लेकिन जो क्वेरी में अक्सर उपयोग किए जाने वाले कॉलम प्रदान करते हैं। ये इंडेक्स को अनुमति दे सकते हैं -only स्कैन (जिनमें से एक है क्योंकि जरूरत मूल्यों सूचकांक में सभी कर रहे हैं तालिका डेटा का उपयोग करने की जरूरत नहीं है)।

वहाँ भी बहुत कुछ कहा जा सकता है कि है, लेकिन इस क्षेत्र का एक बहुत शामिल हैं।

  • आवश्यकतानुसार कुछ अनुक्रमणिका के रूप में - और अधिमानतः कोई अतिरिक्त नहीं।
1

सामान्य रूप से, आप टेबल निर्माण के दौरान इंडेक्स सेट अप करते हैं। इस चरण में आपको पहले से ही एक अच्छा संकेत होना चाहिए कि आपके डेटा की पूछताछ कैसे की जाएगी, और कौन से फ़ील्ड क्वेरी मानदंडों के रूप में सबसे अधिक उपयोग किए जाएंगे।

प्रदर्शन ट्यूनिंग के दौरान, आमतौर पर स्पष्ट इंडेक्स होने की अनुशंसा की जाती है। इस चरण के दौरान, आप समझ पाएंगे कि ऐसे इंडेक्स हैं जो कुशलता से उपयोग नहीं किए जा रहे हैं, या यदि ऐसे प्रश्न हैं जहां कोई इंडेक्स प्रदर्शन बढ़ा सकता है। प्रदर्शन ट्यूनिंग के दौरान नई अनुक्रमणिका को छोड़ने या जोड़ने के लिए आपको कुछ भी नहीं रोक रहा है।

5

एक संतुलन है जिसे मारा जाना चाहिए। यदि आप जानते हैं कि एक तालिका की पूछताछ की जाएगी और फील्डए उस खंड का हिस्सा होगा और यह एक ऐसा क्षेत्र है जो अत्यधिक चुनिंदा (Google कार्डिनालिटी) है तो यह प्री-एम्प्टीव ट्यूनिंग के लिए एक अच्छा उम्मीदवार बनाता है।

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

साइड नोट - कुछ बड़े डेटा लोड के लिए लोग अक्सर इंडेक्स ड्रॉप करते हैं, लोड करते हैं और फिर इंडेक्स को फिर से बनाते हैं ताकि भार अधिक तेज़ी से प्रदर्शन कर सके।

जहां तक ​​फायदे और नुकसान - अच्छी तरह से यह एक बड़ा विषय है। मेरा सुझाव है कि आप यहां शुरू करें।

http://odetocode.com/articles/70.aspx

1

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

लाभ - तेजी से पहुंच (जब सूचकांक का उपयोग किया जा रहा है), और कुछ व्यावसायिक तर्क लागू करने की क्षमता जैसे डुप्लिकेट नहीं।

नुकसान - मेज और अधिक स्थान लेता है, पंक्तियों डालने (बहुत धीमी हो सकता है) धीमी है, कि प्रमुख क्षेत्र (रों) स्पर्श धीमी

+0

@MrTelly क्या आप कह सकते हैं कि 'स्पष्ट' अनुक्रमणिका क्या हैं ? –

+0

जैसा कि मैंने कहा था, जो फ़ील्ड आप जानते हैं उन्हें भी किसी भी विदेशी कुंजी फ़ील्ड से पूछताछ की जाएगी। – MrTelly

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