Verbraucht eine SQL Server-Bit-Spalte wirklich ein ganzes Byte Speicherplatz?


20

Ich stöberte in SSMS herum und bemerkte, dass die "Größe" meiner INTSpalten 4 Bytes betrug (erwartet), aber ich war ein bisschen schockiert, als ich sah, dass meine BITSpalten ein ganzes Byte waren.

Habe ich falsch verstanden, was ich sah?


1
Ich hätte das Glück, dass BIT-Spalten an einer Byte-Grenze anstatt an einer Wortgrenze ausgerichtet sind.
Mike Sherrill 'Cat Recall'

Antworten:



14

Ja.

Wenn Sie nur eine bitSpalte in der Tabelle haben, verwendet der Speicher a, es können bytejedoch bis zu 8 bitSpalten 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 bitfü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 TABLEwenn die Zeile noch nicht aktualisiert wurde).


9

BITverwendet ein Byte pro Zeile, aber Sie können bis zu 8 BITFelder in diesen Ein-Byte-Speicher packen .

Das erste Feld kostet also ein Byte, die nächsten sieben sind frei !

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.