Una colonna di bit di SQL Server utilizza davvero un intero byte di spazio?


20

Stavo frugando in SSMS e ho notato che la "dimensione" delle mie INTcolonne era di 4 byte (prevista), ma ero un po 'scioccato nel vedere le mie BITcolonne erano un intero byte.

Ho frainteso quello che stavo guardando?


1
Mi sentirei fortunato che le colonne BIT siano allineate su un limite di byte anziché su un limite di parola.
Mike Sherrill "Cat Recall",

Risposte:



14

Sì.

Se bitnella tabella è presente una sola colonna, l'archiviazione utilizza un numero bytemassimo di 8bit colonne che possono essere archiviate nello stesso byte in modo che le 7 successive siano "libere" a tale riguardo.

Esiste anche una necessità di archiviazione di 1 bit per colonna per NULL_BITMAP(nuovamente arrotondato al byte successivo). Nelle pagine di dati questo contiene un bitper tutte le colonne indipendentemente dal fatto che lo consentano o meno NULL(ad eccezione delle colonne nullable aggiunte in seguito poiché i metadati cambiano solo attraverso il punto in ALTER TABLEcui la riga non è stata ancora aggiornata)


9

BITutilizza un byte per riga, ma è possibile comprimere fino a 8 BITcampi in quell'archiviazione di un byte.

Quindi il primo campo costa un byte, ma i successivi sette sono gratuiti !

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.