ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINT
คอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBIT
คอลัมน์ของฉันเป็นไบต์ทั้งหมด
ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?
ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINT
คอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBIT
คอลัมน์ของฉันเป็นไบต์ทั้งหมด
ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?
คำตอบ:
คุณมีคอลัมน์บิตจำนวนเท่าใดในตาราง ฉันพบสิ่งนี้ใน MSDN ว่ามีคอลัมน์ 8 บิตหรือน้อยกว่านั้นถูกจัดเก็บเป็นหนึ่งไบต์
ใช่.
หากคุณมีเพียงหนึ่งbit
คอลัมน์ในตารางการจัดเก็บที่ใช้byte
แต่ไม่เกิน 8 bit
คอลัมน์สามารถเก็บไว้ในไบต์เดียวกันดังนั้น 7 ถัดไปจะเป็น "ฟรี" ในส่วนนั้น
นอกจากนี้ยังมีความต้องการที่เก็บข้อมูล 1 บิตต่อคอลัมน์สำหรับNULL_BITMAP
(ปัดเศษขึ้นอีกเป็นไบต์ถัดไป) ในหน้าข้อมูลนี้มีbit
คอลัมน์สำหรับทุกคอลัมน์โดยไม่คำนึงว่าจะอนุญาตหรือไม่NULL
( ยกเว้นคอลัมน์ที่สามารถลบได้ที่เพิ่มในภายหลังเนื่องจากข้อมูลเมตาเปลี่ยนเฉพาะในALTER TABLE
กรณีที่แถวยังไม่ได้อัปเดต)
BIT
ใช้หนึ่งไบต์ต่อแถว แต่คุณสามารถแพ็คได้ถึง 8 BIT
เขตข้อมูลลงในที่เก็บข้อมูลหนึ่งไบต์
ดังนั้นฟิลด์แรกมีค่าใช้จ่ายหนึ่งไบต์ แต่เจ็ดฟิลด์ถัดไปนั้นฟรี !