Не, използването на NULL няма да заема по-малко място от празен VARCHAR
или INT
поле. Всъщност може да отнеме повече пространство. Ето защо:
A VARCHAR
се съхранява като размер + стойност. Броят на байтовете, използвани за размера, зависи от максималното съхранение на VARCHAR
. VARCHAR(255)
изисква един байт, VARCHAR(65536)
изисква два байта и т.н.
Така че VARCHAR(255)
колоната заема един байт, дори ако съхранявате празен низ. Следващата таблица ще отнеме минимум един байт на ред (плюс някои други възможни допълнителни разходи в зависимост от механизма за съхранение).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
За да запазите NULL
стойности, MySQL използва битова маска за всеки ред. На байт могат да се съхраняват до 8 колони с нулеви стойности. Така че, ако имате таблица като тази:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Ще отнеме минимум два байта на ред. Съхранение на NULL
просто задава бит, той вече е запазен, независимо дали го използвате или не. Байтът за VARCHAR
Размерът на 's все още се използва за всеки ред, дори ако колоната е зададена на NULL
.