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?
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?
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ą 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)