sql server - मल्टी-कॉलम इंडेक्स बनाम एकाधिक इंडेक्स




sql-server database (4)

मैं बस SQL ​​सर्वर 2005 में एक तालिका में एक इंडेक्स जोड़ रहा हूं और यह मुझे सोच रहा है। 1 इंडेक्स बनाने और एकाधिक कॉलम को परिभाषित करने के बीच अंतर क्या है जिसमें 1 इंडेक्स प्रति कॉलम है जो आप इंडेक्स करना चाहते हैं।

क्या कुछ कारण हैं कि किसी को दूसरे पर क्यों इस्तेमाल किया जाना चाहिए?

उदाहरण के लिए

Create NonClustered Index IX_IndexName On TableName
(Column1 Asc, Column2 Asc, Column3 Asc)

बनाम

Create NonClustered Index IX_IndexName1 On TableName
(Column1 Asc)

Create NonClustered Index IX_IndexName2 On TableName
(Column2 Asc)

Create NonClustered Index IX_IndexName3 On TableName
(Column3 Asc)

एक आइटम जो याद किया गया है वह स्टार परिवर्तन है। सूचकांक छेड़छाड़ ऑपरेटर तथ्य तालिका पर किसी भी I / O द्वारा किए जाने से पहले प्रत्येक भविष्यवाणी द्वारा प्रभावित पंक्तियों के सेट की गणना करके अनुमान को हल करते हैं। एक स्टार स्कीमा पर आप प्रत्येक व्यक्तिगत आयाम कुंजी को अनुक्रमित करेंगे और क्वेरी ऑप्टिमाइज़र इंडेक्स चौराहे गणना द्वारा चुनने वाली पंक्तियों को हल कर सकता है। व्यक्तिगत कॉलम पर इंडेक्स इस के लिए सबसे अच्छा लचीलापन देते हैं।


मल्टी-कॉलम इंडेक्स का उपयोग सभी कॉलमों के संदर्भ में पूछे जाने वाले प्रश्नों के लिए किया जा सकता है:

SELECT *
FROM TableName
WHERE Column1=1 AND Column2=2 AND Column3=3

इसे मल्टी-कॉलम इंडेक्स का उपयोग करके सीधे देखा जा सकता है। दूसरी तरफ, सिंगल-कॉलम इंडेक्स में से अधिकांश में इस्तेमाल किया जा सकता है (इसे कॉलम 1 = 1 वाले सभी रिकॉर्ड देखना होगा, और फिर उनमें से प्रत्येक में कॉलम 2 और कॉलम 3 देखें)।


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

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

एकल कॉलम पर इंडेक्स बनाना ओएलटीपी सिस्टम में अक्सर लुकअप ऑपरेशंस के लिए उपयोगी होता है।

आपको खुद से पूछना चाहिए कि आप कॉलम को अनुक्रमणित क्यों कर रहे हैं और उनका उपयोग कैसे किया जाएगा। कुछ क्वेरी योजनाएं चलाएं और देखें कि उन्हें कब एक्सेस किया जा रहा है। इंडेक्स ट्यूनिंग विज्ञान के रूप में उतना ही वृत्ति है।


हाँ। मैं अनुशंसा करता हूं कि आप इंडेक्सिंग पर किम्बर्ली ट्रिप के लेख देखें

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

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

आप यह निर्धारित करने में सहायता के लिए ट्यूनिंग विज़ार्ड का भी उपयोग कर सकते हैं कि कौन से इंडेक्स किसी दिए गए प्रश्न या वर्कलोड को सर्वश्रेष्ठ प्रदर्शन करेंगे।





indexing