Действительно ли битовый столбец SQL Server использует пространство в байтах?

20

Я копался в SSMS и заметил, что «размер» моих INTстолбцов составлял 4 байта (ожидаемый), но я был немного шокирован, увидев, что мои BITстолбцы были целым байтом.

Я неправильно понял то, на что я смотрел?

Nate
источник
1
Мне повезло, что столбцы BIT выровнены по границе байта, а не по границе слова.
Майк Шеррилл 'Cat Recall'

Ответы:

17

Сколько битовых столбцов вы определили в таблице? Я нашел это на MSDN, он говорит, что 8 или менее битовых столбцов хранятся как один байт.

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

SQLRockstar
источник
Принято для источника MSDN, который мне не удалось найти. Благодарю.
Ноябрь
14

Да.

Если bitв таблице только один столбец, то в хранилище используется byteдо 8 bitстолбцов, которые могут быть сохранены в одном байте, поэтому следующие 7 являются «свободными» в этом отношении.

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

Мартин Смит
источник
9

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

Итак, первое поле стоит один байт, а следующие семь бесплатны !

JNK
источник