Laramie बिटमैप के बारे में सही है और वह मैनुअल में सही जगह से लिंक करता है। फिर भी, यह लगभग है, लेकिन बिल्कुल सही नहीं है:
<ब्लॉकक्वॉट>तो किसी भी पंक्ति के लिए एक या अधिक नल के साथ, इसमें जोड़ा गया आकार बिटमैप (एन-कॉलम तालिका के लिए एन बिट्स, गोलाकार) होगा।
डेटा संरेखण में एक कारक होना चाहिए। HeapTupleHeader
(प्रति पंक्ति) 23 बाइट लंबा है, वास्तविक कॉलम डेटा हमेशा MAXALIGN
. के गुणज से शुरू होता है (आमतौर पर 8 बाइट्स)। यह पैडिंग के एक बाइट को छोड़ देता है जिसका उपयोग नल बिटमैप द्वारा किया जा सकता है। वास्तव में न्यूल स्टोरेज 8 कॉलम तक की टेबल के लिए बिल्कुल मुफ्त है ।
उसके बाद, एक और MAXALIGN
(आमतौर पर 8) बाइट्स अगले MAXALIGN * 8
. के लिए आवंटित किए जाते हैं (आमतौर पर 64) कॉलम। आदि हमेशा उपयोगकर्ता कॉलम की कुल संख्या के लिए (सभी या कुछ नहीं ) लेकिन केवल तभी जब पंक्ति में कम से कम एक वास्तविक NULL मान हो।
मैंने उन सभी को सत्यापित करने के लिए व्यापक परीक्षण किए। अधिक विवरण:
- क्या PostgreSQL में NULL का उपयोग अभी भी हेडर में NULL बिटमैप का उपयोग नहीं करता है?