क्या SQL सर्वर बिट स्तंभ वास्तव में अंतरिक्ष की पूरी बाइट का उपयोग करता है?


20

मैं SSMS के आसपास घूम रहा था और देखा कि मेरे INTकॉलम का "आकार" 4 बाइट्स (अपेक्षित) था, लेकिन मुझे यह देखकर थोड़ा झटका लगा कि मेरे BITकॉलम पूरे बाइट थे।

क्या मैं गलत समझ रहा था कि मैं क्या देख रहा था?


1
मैं भाग्यशाली महसूस करूंगा कि BIT कॉलम एक शब्द सीमा के बजाय बाइट सीमा पर संरेखित हैं।
माइक शेरिल 'कैट रिकॉल'

जवाबों:


17

आपने तालिका में कितने बिट कॉलम परिभाषित किए हैं? मैंने इसे MSDN पर पाया, यह कहता है कि 8 या उससे कम बिट कॉलम को एक बाइट के रूप में संग्रहीत किया जाता है।

http://msdn.microsoft.com/en-us/library/ms177603.aspx


MSDN स्रोत के लिए स्वीकार किया गया जिसे मैं खोजने में विफल रहा। धन्यवाद।
नैट

14

हाँ।

यदि आपके पास bitतालिका में केवल एक स्तंभ है, तो भंडारण का उपयोग करता है, byteलेकिन 8 bitकॉलम तक एक ही बाइट में संग्रहीत किया जा सकता है, इसलिए अगले 7 उस संबंध में "स्वतंत्र" हैं।

NULL_BITMAP( प्रति फिर अगले बाइट के लिए गोल) के लिए 1 बिट प्रति स्तंभ भंडारण की आवश्यकता है । डेटा पृष्ठों में यह bitसभी कॉलमों के लिए है, भले ही वे अनुमति दें या न दें NULL( अशक्त स्तंभों के अपवाद के साथ बाद में मेटाडेटा के रूप में जोड़ा गया है केवल परिवर्तन के माध्यम से ALTER TABLEजहां पंक्ति अभी तक अपडेट नहीं हुई है)


9

BITप्रति पंक्ति एक बाइट का उपयोग करता है, लेकिन आप BITएक बाइट संग्रहण में 8 फ़ील्ड तक पैक कर सकते हैं ।

तो पहले क्षेत्र में एक बाइट खर्च होती है, लेकिन अगले सात नि: शुल्क हैं !

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.