Nee, het gebruik van NULL neemt niet minder ruimte in beslag dan een lege VARCHAR
of INT
veld. In feite kan het meer in beslag nemen ruimte. Dit is waarom:
Een VARCHAR
wordt opgeslagen als een maat + waarde. Het aantal bytes dat voor de grootte wordt gebruikt, hangt af van de maximale opslag van de VARCHAR
. VARCHAR(255)
vereist één byte, VARCHAR(65536)
vereist twee bytes enzovoort.
Zodat VARCHAR(255)
kolom neemt één byte in beslag, zelfs als u een lege tekenreeks opslaat. De volgende tabel zou minimaal één byte per rij in beslag nemen (plus wat andere mogelijke overhead, afhankelijk van de opslagengine).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Om NULL
op te slaan waarden, gebruikt MySQL een bitmasker voor elke rij. Per byte kunnen maximaal 8 nullable-kolommen worden opgeslagen. Dus als je zo'n tabel hebt:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Zou minimaal twee bytes per rij kosten. NULL
opslaan zet gewoon het bit, het is al gereserveerd, of je het nu gebruikt of niet. De byte voor de VARCHAR
's grootte wordt nog steeds gebruikt voor elke rij, zelfs als de kolom is ingesteld op NULL
.