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?


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:



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)


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 !

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.