Чи дійсно бітовий стовпчик SQL Server використовує цілий байт, який коштує місця?


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 є "вільними" в цьому відношенні.

Також є необхідність зберігання 1 біт на стовпчик для NULL_BITMAP(знову округлена до наступного байта). На сторінках даних він містить bitдля всіх стовпців незалежно від того, дозволяють вони чи ні NULL( за винятком змінних стовпців, доданих пізніше як метадані, змінюються лише через ALTER TABLEте, що рядок ще не оновлено)


9

BITвикористовує один байт у рядку, але ви можете запакувати до 8 BITполів у цьому одному байтовому сховищі.

Тож перше поле коштує один байт, а наступні сім безкоштовні !

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.