คอลัมน์บิตของ SQL Server ใช้เนื้อที่ทั้งไบต์จริง ๆ หรือไม่


20

ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINTคอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBITคอลัมน์ของฉันเป็นไบต์ทั้งหมด

ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?


1
ฉันรู้สึกโชคดีที่คอลัมน์ BIT จัดอยู่ในขอบเขตไบต์แทนขอบเขตของคำ
Mike Sherrill 'Cat Recall'

คำตอบ:


17

คุณมีคอลัมน์บิตจำนวนเท่าใดในตาราง ฉันพบสิ่งนี้ใน MSDN ว่ามีคอลัมน์ 8 บิตหรือน้อยกว่านั้นถูกจัดเก็บเป็นหนึ่งไบต์

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


ได้รับการยอมรับสำหรับแหล่งที่มา MSDN ซึ่งฉันไม่พบ ขอบคุณ
เนท

14

ใช่.

หากคุณมีเพียงหนึ่งbitคอลัมน์ในตารางการจัดเก็บที่ใช้byteแต่ไม่เกิน 8 bitคอลัมน์สามารถเก็บไว้ในไบต์เดียวกันดังนั้น 7 ถัดไปจะเป็น "ฟรี" ในส่วนนั้น

นอกจากนี้ยังมีความต้องการที่เก็บข้อมูล 1 บิตต่อคอลัมน์สำหรับNULL_BITMAP(ปัดเศษขึ้นอีกเป็นไบต์ถัดไป) ในหน้าข้อมูลนี้มีbitคอลัมน์สำหรับทุกคอลัมน์โดยไม่คำนึงว่าจะอนุญาตหรือไม่NULL( ยกเว้นคอลัมน์ที่สามารถลบได้ที่เพิ่มในภายหลังเนื่องจากข้อมูลเมตาเปลี่ยนเฉพาะในALTER TABLEกรณีที่แถวยังไม่ได้อัปเดต)


9

BITใช้หนึ่งไบต์ต่อแถว แต่คุณสามารถแพ็คได้ถึง 8 BITเขตข้อมูลลงในที่เก็บข้อมูลหนึ่งไบต์

ดังนั้นฟิลด์แรกมีค่าใช้จ่ายหนึ่งไบต์ แต่เจ็ดฟิลด์ถัดไปนั้นฟรี !

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.