wake-up-neo.com

Effizienteste Methode zum Speichern von IP-Adressen in MySQL

Was ist die effizienteste Methode zum Speichern und Abrufen von IP-Adressen in MySQL? Ich mache gerade:

SELECT * FROM logins WHERE ip = '1.2.3.4'

Wobei ip ein VARCHAR(15) -Feld ist.

Gibt es einen besseren Weg, dies zu tun?

68
ensnare

Für IPv4-Adressen können Sie diese als int unsigned Speichern und die INET_ATON() und INET_NTOA() gibt die IP-Adresse von ihrem numerischen Wert zurück und umgekehrt.

Beispiel:

SELECT INET_ATON('127.0.0.1');

+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
|             2130706433 | 
+------------------------+
1 row in set (0.00 sec)


SELECT INET_NTOA('2130706433');

+-------------------------+
| INET_NTOA('2130706433') |
+-------------------------+
| 127.0.0.1               | 
+-------------------------+
1 row in set (0.02 sec)
106
Daniel Vassallo

Wenn Sie nur IPv4-Adressen speichern möchten, können Sie diese in einem 32-Bit-Ganzzahlfeld speichern.

Wenn Sie auch IPv6 unterstützen möchten, ist eine Zeichenfolge wahrscheinlich die am einfachsten zu lesende/zu verwendende Methode (obwohl Sie sie technisch in einem 16-Byte-Feld VARBINARY() speichern könnten, wäre es ärgerlich, dies zu versuchen Generieren von SQL-Anweisungen zur Auswahl nach IP-Adresse ("von Hand")

54
Dean Harding

Am wichtigsten ist es, sicherzustellen, dass die Spalte indiziert ist. Dies kann einen großen Unterschied bei Abfragen basierend auf der IP-Adresse bedeuten.

4
Mark Byers

Was für Sie am einfachsten ist, damit zu arbeiten. Das Problem mit der Größe oder Geschwindigkeit ist erst dann ein Problem, wenn Sie wissen, dass es sich um ein Problem bei der Profilerstellung handelt. In einigen Fällen kann es einfacher sein, mit einer Zeichenfolge zu arbeiten, wenn Sie einen Teilabgleich durchführen müssen. Sorgen Sie sich jedoch nicht um Speicherplatz- oder Leistungsprobleme, es sei denn, Sie haben einen echten Grund, sich darüber Sorgen zu machen.

2
DGM

vielleicht speichern Sie den Integer-Wert direkt in einem Integer-Feld? Eine IP-Adresse ist im Grunde 4 "shorts".

Probieren Sie es aus: http://en.kioskea.net/faq/945-converting-a-32-bit-integer-into-ip

1
Brian Dilley