Ich stöberte in SSMS herum und bemerkte, dass die "Größe" meiner INT
Spalten 4 Bytes betrug (erwartet), aber ich war ein bisschen schockiert, als ich sah, dass meine BIT
Spalten ein ganzes Byte waren.
Habe ich falsch verstanden, was ich sah?
Ich stöberte in SSMS herum und bemerkte, dass die "Größe" meiner INT
Spalten 4 Bytes betrug (erwartet), aber ich war ein bisschen schockiert, als ich sah, dass meine BIT
Spalten ein ganzes Byte waren.
Habe ich falsch verstanden, was ich sah?
Antworten:
Wie viele Bitspalten haben Sie in der Tabelle definiert? Ich fand dieses auf MSDN, es sagt, dass 8 oder weniger Bitspalten als ein Byte gespeichert werden.
Ja.
Wenn Sie nur eine bit
Spalte in der Tabelle haben, verwendet der Speicher a, es können byte
jedoch bis zu 8 bit
Spalten in demselben Byte gespeichert werden, sodass die nächsten 7 in dieser Hinsicht "frei" sind.
Es gibt auch einen Speicherbedarf von 1 Bit pro Spalte für das NULL_BITMAP
(wieder aufgerundet auf das nächste Byte). Auf den Datenseiten enthält dies ein bit
für alle Spalten, unabhängig davon, ob sie zulässig sind oder nicht NULL
(mit Ausnahme der später als Metadaten hinzugefügten nullwertfähigen Spalten, die sich nur ändern, ALTER TABLE
wenn die Zeile noch nicht aktualisiert wurde).