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
.