¿Una columna de bits de SQL Server realmente utiliza un byte completo de espacio?


20

Estaba hurgando en SSMS y noté que el "tamaño" de mis INTcolumnas era de 4 bytes (esperado) pero me sorprendió un poco ver que mis BITcolumnas eran un byte completo.

¿Entendí mal lo que estaba mirando?


1
Me sentiría afortunado de que las columnas BIT estén alineadas en un límite de byte en lugar de un límite de palabra.
Mike Sherrill 'Cat Recall'

Respuestas:



14

Sí.

Si solo tiene una bitcolumna en la tabla, entonces el almacenamiento utiliza un bytepero bitse pueden almacenar hasta 8 columnas en el mismo byte, por lo que las siguientes 7 son "libres" a ese respecto.

También hay una necesidad de almacenamiento de 1 bit por columna para NULL_BITMAP(nuevamente redondeado al siguiente byte). En las páginas de datos, esto contiene un bitpara todas las columnas, independientemente de si lo permiten o no NULL(con la excepción de las columnas anulables que se agregan más tarde ya que los metadatos solo cambian a través de ALTER TABLEdonde la fila aún no se ha actualizado)


9

BITusa un byte por fila, pero puede empaquetar hasta 8 BITcampos en ese almacenamiento de byte.

Entonces, el primer campo cuesta un byte, ¡pero los siguientes siete son gratis !

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.