हालांकि मैं उन विशिष्ट आंतरिक तंत्रों को नहीं जानता जो मतभेदों के लिए ज़िम्मेदार हैं, मैं कह सकता हूं कि हेप्स प्रबंधित (आंतरिक रूप से) क्लस्टर्ड इंडेक्स (और संभवतः गैर-अनुक्रमित अनुक्रमित) की तुलना में थोड़ा अलग हैं:
हीप से पंक्तियाँ हटाना जैसे कि एक या अधिक डेटा पृष्ठ खाली हों (कोई आबंटित पंक्तियाँ) आवश्यक रूप से उस स्थान को खाली नहीं करती हैं। आपको संभवतः या तो बनाने की आवश्यकता होगी, और फिर ड्रॉप, टेबल पर एक क्लस्टर इंडेक्स, या कॉल ALTER TABLE [TableName] REBUILD;
(एसक्यूएल सर्वर 2014 के रूप में?)। अधिक विवरण और विकल्पों के लिए कृपया DELETE के लिए Microsoft डॉक्स पृष्ठ देखें।
INSERT
एक हीप में अलग-अलग पंक्तियों (यानी सेट-आधारित नहीं ) को सम्मिलित करना डेटा पेजों को पूरी तरह से नहीं भरता है जैसा कि यह क्लस्टर इंडेक्स के साथ करता है। क्लस्टर इंडेक्स पंक्तियों को तब तक फिट करेंगे जब तक कि पंक्ति (डेटा और पंक्ति-ओवरहेड) प्लस स्लॉट बाइट के 2-बाइट ओवरहेड के लिए जगह नहीं है। हीप्स में डेटा पेज, हालांकि, पेज पर बचे बाइट्स की संख्या का उपयोग नहीं करते हैं, लेकिन इसके बजाय पेज पूरा होने के एक बहुत सामान्यीकृत संकेतक का उपयोग करें, और रिपोर्ट किए गए कई स्तर नहीं हैं। स्तर कुछ इस प्रकार हैं: 0%, 20%, 50%, 80%, और 100% पूर्ण। और यह 100% से अधिक पर स्विच करेगा जबकि दूसरी पंक्ति के लिए अभी भी जगह है (और वास्तव में, सेट-आधारित ऑपरेशन में उन समान पंक्तियों को सम्मिलित किया गया था, तो यह पृष्ठ को जितना संभव हो उतना भर जाएगा)। बेशक, बस के साथ की तरहDELETE
ऑपरेशन, हीप का पुनर्निर्माण डेटा पंक्तियों पर फिट होने के रूप में कई पंक्तियों को पैक करेगा।
अब निम्न जानकारी पर विचार करें, पृष्ठ संपीड़न कार्यान्वयन के लिए Microsoft डॉक्स पृष्ठ के "जब पृष्ठ संपीड़न व्यवसाय" अनुभाग से लिया गया है :
... जैसा कि डेटा पहले डेटा पेज में जोड़ा जाता है, डेटा पंक्ति-संपीड़ित होता है। ... जब पृष्ठ भर जाता है, तो जोड़ी जाने वाली अगली पंक्ति पृष्ठ संपीड़न ऑपरेशन शुरू करती है। पूरे पृष्ठ की समीक्षा की जाती है; ...
इसलिए, यह पूरी तरह से इस अन्य हीप व्यवहार के साथ इनलाइन लगता है कि उन्हें डेटा सूचकांक लिखे जाने से पहले, एक क्लस्टर इंडेक्स की एक रचनात्मक तालिका, क्रेट / DROP की आवश्यकता होती है, या डेटा संपीड़न सेटिंग (जिसमें से सभी को फिर से बनाया जाता है) में परिवर्तन होता है। बेहतर। यदि हीप्स को "पूरे पृष्ठ" (हीप के पुनर्निर्माण होने तक) के बारे में पूरी तरह से पता नहीं है और यह नहीं जानते कि पेज निश्चित रूप से भरा हुआ है, तो उन्हें पता नहीं चलेगा कि पेज कंप्रेशन ऑपरेशन कब शुरू करना है (अपडेट्स और सिंगल के साथ काम करते समय) -सीरो आवेषण)।
एक अन्य तकनीकी जो ऑटो-अप्लाई पेज कंप्रेशन से कुछ हीप्स को सीमित कर देगी (भले ही वे अन्यथा कर सकते हैं) यह है कि कंप्रेशन को लागू करने के लिए उस हीप (यदि कोई मौजूद हो) के लिए सभी नॉनक्लेस्टेड इंडेक्स की आवश्यकता होगी। जैसा कि "डेटा संपीड़न" के लिए जुड़ा हुआ पेज भी बताता है:
एक ढेर की संपीड़न सेटिंग को बदलने के लिए टेबल पर सभी गैर-अनुक्रमित अनुक्रमों को फिर से बनाने की आवश्यकता होती है ताकि उनके पास ढेर में नए पंक्ति स्थानों के लिए संकेत हो।
"पॉइंटर्स" को संदर्भित किया जा रहा है, रो आईडी (आरआईडी) हैं, जो पेज: फाइलआईडी, पेजआईडी और स्लॉट / स्थिति का एक संयोजन हैं। इन RID को नॉनक्लेस्टेड इंडेक्स में कॉपी किया जाता है। एक सटीक भौतिक स्थान होने के नाते, वे कभी-कभी क्लस्टर्ड इंडेक्स कीज़ के साथ बी-ट्री को हटाने की तुलना में अधिक तेज़ होते हैं। लेकिन, एक भौतिक स्थान की एक खामी यह है कि यह बदल सकता है, और यह यहां मुद्दा है। हालाँकि, क्लस्टर किए गए अनुक्रमणिका इस समस्या से ग्रस्त नहीं हैं, क्योंकि उनके प्रमुख मानों को गैर-संकुलित अनुक्रमणिका में प्रतिलिपि किए गए संकेतक के रूप में संकुलित अनुक्रमणिका में कॉपी किया जाता है। और मुख्य मूल्य समान रहते हैं, तब भी जब उनका भौतिक स्थान बदलता है।
और देखें:
हीप्स के लिए Microsoft डॉक्स पेज का "मैनेजिंग हीप्स" सेक्शन (क्लस्टर इंडेक्स के बिना टेबल्स) :
व्यर्थ स्थान को पुनः प्राप्त करने के लिए एक ढेर का पुनर्निर्माण करने के लिए, ढेर पर एक क्लस्टर इंडेक्स बनाएं और फिर उस क्लस्टर इंडेक्स को ड्रॉप करें।
"डॉक्स के लिए जब आप पंक्ति और पृष्ठ संपीड़न का उपयोग करते हैं, तो Microsoft डेटा पृष्ठ का अनुभाग" के लिए विचार :
जब पृष्ठ-स्तरीय संपीड़न के लिए एक हीप को कॉन्फ़िगर किया जाता है, तो पृष्ठ केवल निम्न तरीकों से पृष्ठ-स्तरीय संपीड़न प्राप्त करते हैं:
- डेटा बल्क ऑप्टिमाइज़ेशन के साथ आयात किया गया बल्क है।
- डेटा INSERT INTO ... (TABLOCK) सिंटैक्स के साथ डाला जाता है और तालिका में एक गैर-सूचीबद्ध सूचकांक नहीं होता है।
- पृष्ठ संपीड़न विकल्प के साथ ALTER TABLE ... REBUILD विवरण को निष्पादित करके एक तालिका का पुनर्निर्माण किया जाता है।
और प्रश्न में उद्धृत कथन।