Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

क्लस्टर्ड इंडेक्स को किस कॉलम पर रखा जाना चाहिए?

एक इंडेक्स, क्लस्टर्ड या नॉन-क्लस्टर, का उपयोग क्वेरी ऑप्टिमाइज़र द्वारा किया जा सकता है यदि और केवल तभी जब इंडेक्स में सबसे बाईं कुंजी को फ़िल्टर किया जाता है। इसलिए यदि आप कॉलम (ए, बी, सी) पर एक इंडेक्स परिभाषित करते हैं, तो example@sqldat.com पर WHERE की स्थिति , example@sqldat.com . पर या example@sqldat.com AND example@sqldat.com . पर पूरी तरह से सूचकांक का लाभ नहीं उठाएगा (नोट देखें)। यह शर्तों में शामिल होने पर भी लागू होता है। कोई भी WHERE फ़िल्टर जिसमें A . शामिल है सूचकांक पर विचार करेगा:example@sqldat.com या example@sqldat.com AND example@sqldat.com या example@sqldat.com AND example@sqldat.com या example@sqldat.com AND example@sqldat.com AND example@sqldat.com .

तो आपके उदाहरण में यदि आप part_no . पर संकुल अनुक्रमणिका बनाते हैं बाईं ओर की कुंजी के रूप में, फिर एक विशिष्ट part_id . की तलाश में एक क्वेरी होगा नहीं अनुक्रमणिका का उपयोग करें और part-id . पर एक अलग गैर-संकुल अनुक्रमणिका मौजूद होनी चाहिए ।

अब इस सवाल के बारे में कि क्लस्टर किए गए . कितने इंडेक्स में से कौन सा होना चाहिए? एक। यदि आपके पास कई क्वेरी पैटर्न हैं जो समान महत्व और आवृत्ति के बारे में हैं और आवश्यक कुंजियों के संदर्भ में एक-दूसरे का खंडन करते हैं (उदाहरण के लिए या तो द्वारा लगातार क्वेरीज़ part_no या part_id ) तो आप अन्य कारकों को ध्यान में रखते हैं:

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

नोट:नहीं पूरी तरह लीवरेज क्योंकि कभी-कभी इंजन स्कैन . के लिए एक गैर-संकुल सूचकांक का चयन करेगा संकुल सूचकांक के बजाय केवल इसलिए कि संकरा है और इस प्रकार स्कैन करने के लिए कम पृष्ठ हैं। मेरे उदाहरण में यदि आपके पास example@sqldat.com पर एक अनुक्रमणिका (A, B, C) और WHERE फ़िल्टर है और क्वेरी प्रोजेक्ट C , अनुक्रमणिका का उपयोग होने की संभावना है, लेकिन खोज के रूप में नहीं, स्कैन के रूप में, क्योंकि अभी भी एक पूर्ण क्लस्टर स्कैन (कम पृष्ठ) की तुलना में तेज़ है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक पंक्तियों में मानों को विभाजित करें

  2. चर के साथ एसक्यूएल उपयोग कथन

  3. पहले से मौजूद तालिका के लिए कॉलम पर अद्वितीय बाधा कैसे बनाएं - SQL सर्वर / TSQL ट्यूटोरियल भाग 97

  4. एक साल में हर महीने के रिकॉर्ड गिनें

  5. SQL सर्वर:तालिका में पंक्तियों की अधिकतम संख्या