2008-10-07 25 views
456

मैं 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) 

उत्तर

224

मैं Cade Roux से सहमत हूं।

यह लेख सही रास्ते पर आप मिलना चाहिए: नोट करने के लिए

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

दूसरे, आप अपने डेटा पर अन्य अनुक्रमित पैदा कर रहे हैं और वे निर्माण कर रहे हैं, तो चतुराई से वे दोबारा इस्तेमाल किया जाएगा।

उदा। कल्पना करें कि आप तीन कॉलम

राज्य, काउंटी, ज़िप पर एक तालिका खोजते हैं।

  • आप कभी-कभी केवल राज्य द्वारा खोजते हैं।
  • कभी-कभी आप राज्य और काउंटी द्वारा खोजते हैं।
  • आप अक्सर राज्य, काउंटी, ज़िप द्वारा खोजते हैं।

फिर राज्य, काउंटी, ज़िप के साथ एक सूचकांक। इन तीनों खोजों में इस्तेमाल किया जाएगा।

यदि आप अकेले ज़िप द्वारा खोजते हैं तो उपर्युक्त अनुक्रमणिका का उपयोग नहीं किया जाएगा (SQL सर्वर द्वारा वैसे भी) क्योंकि ज़िप उस अनुक्रमणिका का तीसरा हिस्सा है और क्वेरी ऑप्टिमाइज़र उस अनुक्रमणिका को सहायक नहीं देख पाएगा।

फिर आप अकेले पिन कि इस उदाहरण में इस्तेमाल किया जाएगा पर एक सूचकांक बना सकते हैं।

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

लेख बहुत मदद करेगा। :-)

+1

sqlskills.com लिंक टूटा हुआ है - '/ ब्लॉग/किम्बर्ली' एप्लिकेशन में सर्वर त्रुटि। –

+2

ऐसा लगता है कि यह http://www.sqlskills.com/BLOGS/KIMBERLY/post/Indexes-in-SQL-Server-20052008-Best-Practices-Part-1.aspx – jball

+2

एर पर स्थानांतरित हो गया है, यहां आधिकारिक परमा लिंक है : http://www.sqlskills.com/BLOGS/KIMBERLY/post.aspx?id=19f0ce1c-0d2f-4ad5-9b13-a615418422e0 – jball

56

हां। मैं आपको Kimberly Tripp's articles on indexing की जांच करने की सलाह देता हूं।

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

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

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

+4

किम्बर्ली ट्रिप जानता है कि वह किस बारे में बात कर रही है। मैं उसकी बात पर था और वह इस सामान को अंदर से जानता है। महान सलाह। – evilhomer

+0

क्या आपका मतलब एसक्यूएल सर्वर 2005 है? या आप उस भाषा एसक्यूएल के कुछ संस्करण का जिक्र कर रहे हैं जिसे मैं परिचित नहीं हूं? –

+0

एसक्यूएल सर्वर 2005, उत्तर सही किया गया। –

5

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

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

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

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

30

बहु-स्तंभ सूचकांक सभी स्तंभों को संदर्भित प्रश्नों के लिए इस्तेमाल किया जा सकता:

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

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

+18

इस के साथ – TToni

10

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

+0

+1 कैसे जुड़े (सामान्य) इंडेक्स का उपयोग किए गए अच्छे स्पष्टीकरण के लिए प्रश्न के लिए प्रासंगिक है। – RobM

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