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?


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)


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 !

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.