Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conséquences sur l'espace disque de la définition de la valeur de la colonne MySQL sur NULL au lieu de 0 ou ''

Non, l'utilisation de NULL ne prendra pas moins de place qu'un VARCHAR vide ou INT champ. En fait, cela peut prendre plus espace. Voici pourquoi :

Un VARCHAR est stocké sous la forme d'une taille + valeur. Le nombre d'octets utilisés pour la taille dépend du stockage maximum du VARCHAR . VARCHAR(255) nécessite un octet, VARCHAR(65536) nécessite deux octets et ainsi de suite.

Alors que VARCHAR(255) La colonne occupe un octet même si vous stockez une chaîne vide. Le tableau suivant prendrait au minimum un octet par ligne (plus une autre surcharge possible en fonction du moteur de stockage).

CREATE TABLE sample (
  a VARCHAR(255) NOT NULL
);

Pour enregistrer NULL valeurs, MySQL utilise un masque de bits pour chaque ligne. Jusqu'à 8 colonnes nullables peuvent être stockées par octet. Donc, si vous avez un tableau comme celui-ci :

CREATE TABLE sample (
  a VARCHAR(255) NULL
);

Prendrait un minimum de deux octets par ligne. Stockage de NULL définit juste le bit, il est déjà réservé que vous l'utilisiez ou non. L'octet pour le VARCHAR La taille de est toujours utilisée pour chaque ligne même si la colonne est définie sur NULL .