पीके इंडेक्स में कॉलम का क्रम मायने रखता है?
हाँ यह करता है।
डिफ़ॉल्ट रूप से, प्राथमिक कुंजी बाधा को SQL सर्वर में एक अद्वितीय संकुल सूचकांक द्वारा लागू किया जाता है। संकुलित सूचकांक तालिका में पंक्तियों के तार्किक क्रम को परिभाषित करता है । बी-ट्री इंडेक्स के ऊपरी स्तरों का प्रतिनिधित्व करने के लिए कई अतिरिक्त इंडेक्स पेज जोड़े जा सकते हैं, लेकिन क्लस्टर इंडेक्स का निम्नतम (पत्ती) स्तर केवल डेटा का तार्किक क्रम है।
इसके बारे में स्पष्ट होने के लिए, पृष्ठ पर पंक्तियों को आवश्यक रूप से क्लस्टर इंडेक्स कुंजी क्रम में भौतिक रूप से संग्रहीत नहीं किया जाता है। पृष्ठ के भीतर एक अलग अप्रत्यक्ष संरचना है जो प्रत्येक पंक्ति के लिए एक पॉइंटर को संग्रहीत करता है। यह संरचना संकुल अनुक्रमणिका कुंजियों द्वारा क्रमबद्ध है। साथ ही, प्रत्येक पृष्ठ में पिछले और अगले पृष्ठ पर समान अनुक्रमित कुंजी क्रम में समान स्तर पर एक संकेतक होता है।
की एक प्राथमिक प्राथमिक कुंजी के साथ (RowNumber, DataDate)
, पंक्तियों को तार्किक रूप से पहले RowNumber
और बाद में क्रमबद्ध किया जाता है DataDate
- इसलिए सभी पंक्तियों को जहां RowNumber = 1
तार्किक रूप से समूहीकृत किया जाता है, फिर पंक्तियों को कहां RowNumber = 2
और कहां से जोड़ा जाता है ।
जब आप नया डेटा ( RowNumbers
1 से n के साथ) जोड़ते हैं, तो नई पंक्तियाँ तार्किक रूप से मौजूदा पृष्ठों के अंदर होती हैं, इसलिए SQL सर्वर को कमरे बनाने के लिए बहुत सारे कार्य विभाजन पृष्ठ करने की संभावना होगी। यह सभी गतिविधि बिना किसी लाभ के बहुत सारे अतिरिक्त कार्य (परिवर्तनों को लॉग इन करने सहित) उत्पन्न करती है।
स्प्लिट पेज भी लगभग 50% खाली होने लगते हैं, इसलिए अधिक बंटवारे के परिणामस्वरूप कम पेज घनत्व (प्रति पृष्ठ इष्टतम से कम पंक्तियाँ) हो सकता है। न केवल डिस्क से पढ़ने के लिए यह बुरी खबर है (कम घनत्व = पढ़ने के लिए अधिक पृष्ठ), कम घनत्व वाले पृष्ठ भी कैश होने पर स्मृति में अधिक कमरा लेते हैं।
क्लस्टर किए गए इंडेक्स को (DataDate, RowNumber
) में बदलने का मतलब है कि नए डेटा ( DataDates
वर्तमान में संग्रहीत की तुलना में अधिक ), ताजा पृष्ठों पर क्लस्टर किए गए इंडेक्स के तार्किक अंत में संलग्न है। इससे बंटवारे के अनावश्यक ओवरहेड्स को हटा दिया जाएगा और परिणाम तेजी से लोड हो जाएगा। कम खंडित डेटा का मतलब यह भी है कि रीड-फॉरवर्ड एक्टिविटी (डिस्क से पृष्ठों को पढ़ना, इससे पहले कि वे इन-प्रोग्रेस क्वेरी के लिए आवश्यक हों) अधिक कुशल हो सकते हैं।
यदि और कुछ नहीं, तो आपके प्रश्नों की DataDate
तुलना में खोज करने की अधिक संभावना है RowNumber
। एक संकुल सूचकांक (DataDate, RowNumber
) पर सूचकांक सूचकांक का समर्थन करता है DataDate
(और फिर RowNumber
)। मौजूदा व्यवस्था केवल RowNumber
(और केवल तब, शायद, चालू DataDate
) का समर्थन करती है। DataDate
प्राथमिक कुंजी बदल जाने पर आप मौजूदा गैर-अनुक्रमित सूचकांक को छोड़ने में सक्षम हो सकते हैं । क्लस्टर्ड इंडेक्स गैर-इंडस्टर्ड इंडेक्स की तुलना में व्यापक होगा, ताकि आपको यह सुनिश्चित करने के लिए परीक्षण करना चाहिए कि प्रदर्शन स्वीकार्य है।
जब नया डेटा आयात किया जाता है bcp
, तो आप उच्च प्रदर्शन प्राप्त कर सकते हैं यदि आयात फ़ाइल के डेटा को क्लस्टर इंडेक्स कीज़ (आदर्श रूप से (DataDate, RowNumber
) द्वारा सॉर्ट किया जाता है और आप bcp
विकल्प निर्दिष्ट करते हैं :
-h "ORDER(DataDate,RowNumber), TABLOCK"
सर्वश्रेष्ठ डेटा लोडिंग प्रदर्शन के लिए, आप न्यूनतम लॉग-इन आवेषण प्राप्त करने का प्रयास कर सकते हैं। अधिक जानकारी के लिए देखें: