Une colonne de bits SQL Server utilise-t-elle vraiment un octet entier d'espace?

20

Je fouillais SSMS et j'ai remarqué que la "taille" de mes INTcolonnes était de 4 octets (attendue) mais j'ai été un peu choqué de voir que mes BITcolonnes étaient un octet entier.

Ai-je mal compris ce que je regardais?

Nate
la source
1
Je me sentirais chanceux que les colonnes BIT soient alignées sur une limite d'octet au lieu d'une limite de mot.
Mike Sherrill 'Cat Recall'

Réponses:

17

Combien de colonnes de bits avez-vous définies dans le tableau? J'ai trouvé cela sur MSDN, il dit que les colonnes de 8 bits ou moins sont stockées comme un octet.

http://msdn.microsoft.com/en-us/library/ms177603.aspx

SQLRockstar
la source
Accepté pour la source MSDN que je n'ai pas pu localiser. Merci.
Nate
14

Oui.

Si vous n'avez qu'une seule bitcolonne dans le tableau, le stockage utilise un, bytemais jusqu'à 8 bitcolonnes peuvent être stockées dans le même octet, les 7 suivantes sont donc "libres" à cet égard.

Il existe également un besoin de stockage de 1 bit par colonne pour le NULL_BITMAP(encore arrondi à l'octet suivant). Dans les pages de données, il contient un bitpour toutes les colonnes, qu'elles autorisent ou non NULLl'exception des colonnes annulables ajoutées plus tard en tant que métadonnées ne changent que ALTER TABLEsi la ligne n'a pas encore été mise à jour)

Martin Smith
la source
9

BITutilise un octet par ligne, mais vous pouvez regrouper jusqu'à 8 BITchamps dans ce stockage d'un octet.

Le premier champ coûte donc un octet, mais les sept suivants sont gratuits !

JNK
la source