यदि आप संकुल सारणी के बिना अपनी तालिका बनाने का प्रयास करते हैं, और आपको थोड़ी अलग त्रुटि मिलेगी:
Msg 1701, Level 16, State 1, Line 1 'Mytable' टेबल बनाना या बदलना विफल रहा क्योंकि न्यूनतम पंक्ति का आकार 8067 होगा, जिसमें आंतरिक ओवरहेड के 1530 बाइट्स शामिल हैं। यह अधिकतम स्वीकार्य तालिका पंक्ति का आकार 8060 बाइट्स से अधिक है।
इस त्रुटि संदेश में, आप देख सकते हैं कि पृष्ठ संपीड़न के लिए आंतरिक ओवरहेड की 1530 बाइट्स हैं।
अब, आप गणित कर सकते हैं:
bigint
MyTableID के लिए 8 बाइट्स
int
LastColumn के लिए 4 बाइट्स
- 593
numeric(19,4)
कॉलम में से प्रत्येक के लिए 9 बाइट्स (कुल 5337 बाइट्स)
- संपीड़न उपरि के 1530 बाइट्स
तो, 8 + 4 + (593 * 9) + 1530 = 6879।
एक सेकंड रुको .... यह अभी भी 8060 से नीचे है । उस के साथ क्या हो रहा है ?!
पेज संपीड़न एल्गोरिथ्म वास्तव में एक साथ कई संपीड़न एल्गोरिदम को ढेर करता है। पहला कदम ROW संपीड़न लागू करना है। उस त्रुटि संदेश में सूचीबद्ध 1530 बाइट्स में पंक्ति संपीड़न का ओवरहेड शामिल नहीं है।
आप इस बारे में अधिक पढ़ सकते हैं कि मेरे ब्लॉग पर और यहाँ BOL में पंक्ति संपीड़न कैसे काम करता है । आप BOL लेख में ध्यान देंगे कि यह numeric
भंडारण का वर्णन करता है "यह संग्रहण ठीक वर्डेसीमल भंडारण प्रारूप के समान है," लेकिन व्याख्या नहीं करता है vardecimal
। यह पोस्टvardecimal
थोड़ा अधिक कवर करती है - अनिवार्य रूप से, यह वास्तविक लंबाई को स्टोर करने के लिए प्रति कॉलम ओवरहेड के 2 बाइट्स जोड़ता है (जो varchar
जैसा करता है)।
पंक्ति संपीड़न को 593 numeric
कॉलमों में से प्रत्येक के लिए अतिरिक्त 2 बाइट्स की आवश्यकता होगी , प्लस bigint
और int
प्रत्येक के ऊपर 1 बाइट की आवश्यकता होगी।
पंक्ति संकुचित भंडारण आवश्यकताओं होगा:
bigint
MyTableID के लिए 8 बाइट्स + 1 बाइट ओवरहेड
int
LastColumn के लिए 4 बाइट्स + 1 बाइट ओवरहेड
- 593
numeric(19,4)
कॉलम में से प्रत्येक के लिए 9 बाइट्स + 2 बाइट्स ओवरहेड
- ROW संपीड़न ओवरहेड के 1188 बाइट्स
8 + 4 + (593 * 9) = 5349 बाइट्स डेटा
1 + 1 + (593 * 2) = 1188 बाइट्स पंक्ति संपीड़न ओवरहेड
पंक्ति-संकुचित स्कीमा के लिए कुल 6537 बाइट्स
अब जब हमारे पास पंक्ति-संकुचित स्कीमा के लिए पंक्ति आकार है, तो हम अपने गणित को फिर से देख सकते हैं। पृष्ठ-संकुचित पंक्ति आकार डेटा आकार + पंक्ति संपीड़न ओवरहेड + पृष्ठ संपीड़न ओवरहेड होगा:
bigint
MyTableID के लिए 8 बाइट्स
int
LastColumn के लिए 4 बाइट्स
- 593
numeric(19,4)
कॉलम में से प्रत्येक के लिए 9 बाइट्स
- ROW संपीड़न ओवरहेड के 1188 बाइट्स
- पृष्ठ संपीड़न ओवरहेड के 1530 बाइट्स
5349 बाइट्स डेटा
+ 1188 बाइट्स पंक्ति संपीड़न ओवरहेड
+ 1530 बाइट्स पृष्ठ संपीड़न ओवरहेड
कुल 8067 बाइट्स