Nein, mit NULL wird nicht weniger Platz belegt als mit einem leeren Feld VARCHAR
oder INT
. In der Tat kann es mehr Platz einnehmen. Hier ist warum:
A VARCHAR
wird als Größe + Wert gespeichert. Die Anzahl der Bytes, die für die Größe verwendet werden, hängt vom maximalen Speicher des VARCHAR
ab. VARCHAR(255)
benötigt ein Byte, VARCHAR(65536)
benötigt zwei Bytes und so weiter.
So dass die VARCHAR(255)
Spalte ein Byte einnimmt, auch wenn Sie eine leere Zeichenfolge speichern. Die folgende Tabelle würde mindestens ein Byte pro Zeile benötigen (zuzüglich eines anderen möglichen Aufwands je nach Speichermodul).
Um NULL
-Werte zu speichern, verwendet MySQL für jede Zeile eine Bitmaske. Bis zu 8 Nullwertspalten können pro Byte gespeichert werden. Also, wenn du einen Tisch wie diesen hast:
Wäre mindestens zwei Bytes pro Zeile erforderlich. Speichern von NULL
setzt nur das Bit, es ist bereits reserviert, ob Sie es verwenden oder nicht. Das Byte für die Größe VARCHAR
wird weiterhin für jede Zeile verwendet, auch wenn die Spalte auf NULL
gesetzt ist.
Kommt darauf an.
Wenn Sie eine Tabelle mit fester Breite haben (keine VARCHAR
, VARBINARY
, BLOB
oder TEXT
), wird dies wahrscheinlich keinen Unterschied machen.
In einer Tabelle mit variabler Breite verbraucht ein NULL
wahrscheinlich so viel Speicherplatz wie ein leeres VARCHAR
.
Wenn Sie fast alle Werte NULL
haben und nur sehr wenige Daten enthalten, können Sie eine separate Tabelle erstellen, der Sie sich anschließen.
Nehmen wir an, Sie haben eine Liste von Personen, bei denen nur wenige von ihnen das Geburtsdatum haben.
Also statt
%Vor%könntest du
machen %Vor%und Abfrage der Daten mit einem LINKEN JOIN.
Wenn es Anwendungen gibt, die auf die Tabelle im alten Format zugreifen müssen, könnten Sie eine Ansicht definieren.
Die einfache Antwort ist vielleicht (obwohl es nicht wichtig sein sollte), Nullen können weniger Speicherplatz beanspruchen, obwohl die Platzeinsparung wahrscheinlich winzig sein wird (obwohl sich selbst kleine Einsparungen summieren).
Wenn der Speicherplatz nicht sehr eng ist, würde ich mir keine Gedanken darüber machen (Speicherplatz ist viel billiger als Programmierer Zeit).
Null und 0 (oder '') sind ebenfalls semantisch verschieden und sollten daher nicht synonym verwendet werden, schon gar nicht für einen theoretischen (oder sehr kleinen) Leistungsgewinn.
Siehe Diese Frage für weitere Details.
Ich glaube nicht, dass die Indexierung stark beeinflusst wird, es könnte eine leichte Geschwindigkeitsverbesserung geben.
Weitere Informationen finden Sie diese Frage .
Diese Frage befasst sich speziell mit MySQL und null Leistung.