Não, usar NULL não ocupará menos espaço do que um
VARCHAR
vazio ou INT
campo. Na verdade, pode levar mais espaço. Aqui está o porquê:Um
VARCHAR
é armazenado como um tamanho + valor. O número de bytes usados para o tamanho depende do armazenamento máximo do VARCHAR
. VARCHAR(255)
requer um byte, VARCHAR(65536)
requer dois bytes e assim por diante. Para que
VARCHAR(255)
coluna ocupa um byte mesmo se você armazenar uma string vazia. A tabela a seguir levaria no mínimo um byte por linha (mais alguma outra sobrecarga possível dependendo do mecanismo de armazenamento). CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Para salvar
NULL
valores, o MySQL usa uma máscara de bits para cada linha. Até 8 colunas anuláveis podem ser armazenadas por byte. Então, se você tiver uma tabela como esta:CREATE TABLE sample (
a VARCHAR(255) NULL
);
Levaria um mínimo de dois bytes por linha. Armazenando
NULL
apenas define o bit, já está reservado, quer você o use ou não. O byte para o VARCHAR
O tamanho de 's ainda é usado para cada linha, mesmo se a coluna estiver definida como NULL
.