Czy kolumna bitowa programu SQL Server naprawdę zajmuje cały bajt miejsca?

20

Grzebałem w SSMS i zauważyłem, że „rozmiar” moich INTkolumn to 4 bajty (oczekiwane), ale byłem trochę zszokowany widząc, że moje BITkolumny to cały bajt.

Czy źle zrozumiałem, na co patrzyłem?

Nate
źródło
1
Miałem szczęście, że kolumny BIT są wyrównane na granicy bajtów zamiast na granicy słów.
Mike Sherrill „Cat Recall”

Odpowiedzi:

14

Tak.

Jeśli masz tylko jedną bitkolumnę w tabeli, wówczas pamięć używa bytemaksymalnie 8 bitkolumn, które mogą być przechowywane w tym samym bajcie, więc kolejne 7 jest pod tym względem „wolne”.

Istnieje również potrzeba 1 bitu na kolumnę pamięci NULL_BITMAP(ponownie zaokrąglanej w górę do następnego bajtu). Na stronach danych zawiera to bitdla wszystkich kolumn, niezależnie od tego, czy zezwalają NULL(z wyjątkiem kolumn zerowych dodawanych później, ponieważ metadane zmieniają się tylko w ALTER TABLEprzypadku, gdy wiersz nie został jeszcze zaktualizowany)

Martin Smith
źródło
9

BITużywa jednego bajtu na wiersz, ale można zapakować do 8 BITpól w tym jednym bajcie.

Pierwsze pole kosztuje więc jeden bajt, ale kolejne siedem jest bezpłatne !

JNK
źródło