sql >> Database >  >> RDS >> Mysql

Schijfruimte-implicaties van het instellen van de MySQL-kolomwaarde op NULL in plaats van 0 of ''

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 .



  1. SQL Fiddle-uitvoerfout

  2. Rijen samenvoegen als array uit een andere tabel voor elke rij

  3. selecteer om de andere rij in MySQL zonder afhankelijk te zijn van een ID?

  4. Waarom lopen twee gelijktijdige delete + insert-statements vast in een lege tabel?