Grzebałem w SSMS i zauważyłem, że „rozmiar” moich INT
kolumn to 4 bajty (oczekiwane), ale byłem trochę zszokowany widząc, że moje BIT
kolumny to cały bajt.
Czy źle zrozumiałem, na co patrzyłem?
Grzebałem w SSMS i zauważyłem, że „rozmiar” moich INT
kolumn to 4 bajty (oczekiwane), ale byłem trochę zszokowany widząc, że moje BIT
kolumny to cały bajt.
Czy źle zrozumiałem, na co patrzyłem?
Odpowiedzi:
Ile kolumn bitowych zdefiniowałeś w tabeli? Znalazłem to w MSDN, mówi 8 lub mniej kolumn bitowych są przechowywane jako jeden bajt.
Tak.
Jeśli masz tylko jedną bit
kolumnę w tabeli, wówczas pamięć używa byte
maksymalnie 8 bit
kolumn, 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 bit
dla wszystkich kolumn, niezależnie od tego, czy zezwalają NULL
(z wyjątkiem kolumn zerowych dodawanych później, ponieważ metadane zmieniają się tylko w ALTER TABLE
przypadku, gdy wiersz nie został jeszcze zaktualizowany)