Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswirkungen auf den Speicherplatz, wenn der MySQL-Spaltenwert auf NULL anstelle von 0 oder '' gesetzt wird

Nein, die Verwendung von NULL nimmt nicht weniger Platz ein als ein leerer VARCHAR oder INT aufstellen. Tatsächlich kann es mehr beanspruchen Platz. Hier ist der Grund:

Ein VARCHAR wird als Größe + Wert gespeichert. Die Anzahl der für die Größe verwendeten Bytes hängt von der maximalen Speicherkapazität des VARCHAR ab . VARCHAR(255) erfordert ein Byte, VARCHAR(65536) erfordert zwei Bytes und so weiter.

Also VARCHAR(255) Spalte nimmt ein Byte ein, selbst wenn Sie eine leere Zeichenfolge speichern. Die folgende Tabelle würde mindestens ein Byte pro Zeile benötigen (plus einige andere mögliche Overheads, abhängig von der Speicher-Engine).

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

Um NULL zu speichern -Werte verwendet MySQL eine Bitmaske für jede Zeile. Pro Byte können bis zu 8 Nullable-Spalten gespeichert werden. Wenn Sie also eine Tabelle wie diese haben:

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

Würde mindestens zwei Bytes pro Zeile benötigen. Speichern von NULL setzt einfach das Bit, es ist bereits reserviert, ob Sie es verwenden oder nicht. Das Byte für VARCHAR Die Größe von wird weiterhin für jede Zeile verwendet, auch wenn die Spalte auf NULL gesetzt ist .