Wir optimieren derzeit eine MySQL-Tabelle (InnoDB), die mehr als 100 Millionen Zeilen haben wird.Index für Spalte mit 70% der leeren Werte: Verwenden Sie null oder leer?
In einer Spalte speichern wir IP-Adressen (VARCHAR 45). Wir müssen einen Index für diese Spalte erstellen, da wir alle Zeilen pro spezifischer IP-Adresse abrufen können.
70% aller Zeilen wird jedoch speichern keine IP-Adresse (leer).
Unsere Frage: Sollen wir diese leeren Werte als NULL speichern und somit NULL für diese Spalte zulassen (fügt jeder Zeile 1 Byte hinzu). Oder sollen wir NULL nicht zulassen und diese leeren Werte als '' (leere Zeichenfolge) speichern?
Was ist das Beste für die Leistung?
Wir werden nie Zeilen suchen müssen, die leer sind (= '') oder Null (IS NULL), nur nach bestimmten IP-Adressen (= '123.456.789.123') suchen.
Update: Es gibt tatsächlich viele Fragen zu SO, die ähnliche Szenarien behandeln. Einige Antworten scheinen jedoch widersprüchlich zu sein oder sagen "es kommt darauf an". Wir werden einige Tests durchführen und unsere Ergebnisse für unser spezifisches Szenario hier veröffentlichen.
Ich könnte mir vorstellen, dass die leere Zeichenfolge etwas leistungsfähiger wäre, da sie weniger Speicherplatz benötigt. Der Index wäre im Prinzip derselbe. Die beste Lösung ist die, die Sie TESTEN und überprüfen, ist schneller – Grantly
Mögliches Duplikat von [MySQL: NULL vs ""] (http://stackoverflow.com/questions/1106258/mysql-null-vs) – Shadow
@Shadow Ja, scheint wie Eine ähnliche Frage - aber auf den ersten Blick scheinen mir die zwei Antworten mit der höchsten Punktzahl das Gegenteil zu sagen? Einer sagt "benutze null", der andere sagt "nimm nicht null!". –