Mysql
 sql >> Database >  >> RDS >> Mysql

Implicazioni sullo spazio su disco dell'impostazione del valore della colonna MySQL su NULL invece di 0 o ''

No, l'utilizzo di NULL non occuperà meno spazio di un VARCHAR vuoto o INT campo. In effetti potrebbe richiedere di più spazio. Ecco perché:

Un VARCHAR viene memorizzato come dimensione + valore. Il numero di byte utilizzati per la dimensione dipende dalla memoria massima del VARCHAR . VARCHAR(255) richiede un byte, VARCHAR(65536) richiede due byte e così via.

In modo che VARCHAR(255) la colonna occupa un byte anche se memorizzi una stringa vuota. La tabella seguente richiede un minimo di un byte per riga (più qualche altro possibile sovraccarico a seconda del motore di archiviazione).

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

Per salvare NULL valori, MySQL utilizza una maschera di bit per ogni riga. È possibile memorizzare fino a 8 colonne nullable per byte. Quindi se hai una tabella come questa:

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

Ci vorrebbe un minimo di due byte per riga. Memorizzazione di NULL imposta solo il bit, è già riservato indipendentemente dal fatto che lo usi o meno. Il byte per il VARCHAR La dimensione di viene ancora utilizzata per ogni riga anche se la colonna è impostata su NULL .