sql >> Base de Datos >  >> RDS >> Mysql

Implicaciones de espacio en disco al establecer el valor de la columna MySQL en NULL en lugar de 0 o ''

No, usar NULL no ocupará menos espacio que un VARCHAR vacío o INT campo. De hecho, puede ocupar más espacio. He aquí por qué:

Un VARCHAR se almacena como un tamaño + valor. El número de bytes utilizados para el tamaño depende del almacenamiento máximo de VARCHAR . VARCHAR(255) requiere un byte, VARCHAR(65536) requiere dos bytes y así sucesivamente.

De modo que VARCHAR(255) columna ocupa un byte incluso si almacena una cadena vacía. La siguiente tabla tomaría un mínimo de un byte por fila (más algunos otros posibles gastos generales según el motor de almacenamiento).

CREATE TABLE sample (
  a VARCHAR(255) NOT NULL
);

Para guardar NULL valores, MySQL usa una máscara de bits para cada fila. Se pueden almacenar hasta 8 columnas anulables por byte. Así que si tienes una mesa como esta:

CREATE TABLE sample (
  a VARCHAR(255) NULL
);

Tomaría un mínimo de dos bytes por fila. Almacenando NULL solo establece el bit, ya está reservado ya sea que lo use o no. El byte para el VARCHAR El tamaño de todavía se usa para cada fila, incluso si la columna se establece en NULL .