Ich würde vorschlagen, sich anzusehen, welche Art von Abfragen Sie ausführen werden, um zu entscheiden, welches Format Sie verwenden.
Nur wenn Sie einzelne Oktetts herausziehen oder vergleichen müssen, müssen Sie in Betracht ziehen, sie in separate Felder aufzuteilen.
Speichern Sie es andernfalls als 4-Byte-Ganzzahl. Das hat auch den Vorteil, dass Sie den in MySQL integrierten INET_ATON()
und INET_NTOA()
Funktionen.
Leistung vs. Speicherplatz
Speicherung:
Wenn Sie nur IPv4-Adressen unterstützen, kann Ihr Datentyp in MySQL ein UNSIGNED INT
sein die nur 4 Byte Speicherplatz belegt.
Um die einzelnen Oktette zu speichern, müssten Sie nur UNSIGNED TINYINT
verwenden Datentypen, nicht SMALLINTS
, was jeweils 1 Byte Speicherplatz verbrauchen würde.
Beide Methoden würden einen ähnlichen Speicher verwenden, mit vielleicht etwas mehr für separate Felder für etwas Overhead.
Weitere Informationen:
- Übersicht über numerische Typen
- Integer-Typen (exakter Wert) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Leistung:
Die Verwendung eines einzelnen Felds führt zu einer viel besseren Leistung, es ist ein einzelner Vergleich anstelle von 4. Sie haben erwähnt, dass Sie nur Abfragen für die gesamte IP-Adresse ausführen, sodass es nicht erforderlich sein sollte, die Oktette getrennt zu halten. Mit dem INET_*
Funktionen von MySQL werden die Konvertierung zwischen den Text- und Integer-Darstellungen einmal für den Vergleich durchführen.