PHP: Die richtige Art und Weise zu speichern IP in MySql und schnellstem Weg für IP im ganzen Million von Zeilen suchen

StackOverflow https://stackoverflow.com/questions/3980489

Frage

Ich bin Speicher IPv4-Adressen in einem "int unsigned" Spaltentyp mit INET_ATON. [Bin ich dieses Recht zu tun? Und wird mit „unsigned“ notwendig?] Diese besondere Spalte ist auch indiziert. Da gibt es Millionen von Zeilen und mehrere Zeilen sein, die gleiche IP in der gesamten Tabelle enthalten, was der schnellste Weg sein, für diese Zeilen suchen?

.. oder bin ich über diese gehen in die falsche Richtung?

War es hilfreich?

Lösung

Am tue ich das richtig? Und wird mit "Unsigned" notwendig?

Ja. Ohne unsigned höhere IP-Adressen richtig, werden nicht gespeichert und mit int (statt varchar) speichert sie am effizientesten.

, was der schnellste Weg, um die Suche für diese Zeilen?

Was die Suchoptimierung, die für die (zusätzliche Tabellen, etc ...) auf, was alles Du bist momentan abhängt. Im Allgemeinen indiziert eine unsigned int Spalte gibt Ihnen schnelle Performance.

Andere Tipps

die INET_ATON Verwendung ist der richtige Weg, dies zu tun, so dass Sie nicht besonders bedeutungslose Informationen zu speichern (keinen Punkt in der Lage, einen größeren Wert zu speichern, als 256 für beliebige drei Zahlen). Es ergibt sich eine 32-Bit-Zahl, die in den unsigned int passen.

Indizierung auf der int Spalte Lookups von IP-Adresse schnell. Wenn Ihre Datenbank wirklich groß wird, werden Sie laufen in Startprobleme zu speichern diese Art der Sache in MySQL Skalierung.

Ich nehme an, Sie nicht, dass tun wird, werde aber darauf hin, dass die Speicherung vollständige Protokoll Informationen für eine große beschäftigt Website in einem RDBMS allgemein als eine schlechte Sache (tm) vereinbart. Sie brauchen nicht die relationale Integrität Eigenschaften der Datenbank garantiert, und Sie schreiben viele mehr Einträge als Sie lesen. Betrachten nosql oder Anhänge an flachen Dateien statt, und das Parsen Ihre Protokolle bei Bedarf eines spezielles Programm.

Ja, das ist der beste Weg, die IP-Adressen in MySQL zu speichern.

Wenn Sie in der Dokumentation suchen INET_ATON Sie können sehen, dass es empfehlenswert ist eine unsigned INT Spalte oder eine IP-Adresse zu verwenden, um mit der ersten octed über 127 wird nicht korrekt gespeichert werden.

Dies ist auch eine sehr schnelle Art und Weise sucht zu tun. MySQL Griffe Integer-Spalten sehr gut, und durch diese Spalte indizieren und mit INET_ATON bei Ihrer Suche, können Sie sehr schnell Anfragen erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top