Ich versuche, Maxmind-Datenbank zu verwenden, um die Stadt einiger IP herauszufinden. (http://www.maxmind.com/app/geolitecity) Es gibt zwei Tabellen:
ersten Tabellenspalten:
startIpNum, endIpNum, LOCID
2. Tabellenspalten:
LOCID, Land, Region, Stadt, postal, Breite, Länge, metroCode, VORWAHL
Schnell Erklärung: Ich verwende die erste Tabelle, um die Standort-ID der Tabelle zu erhalten, und dann kann ich die Informationen dieses Standortes aus der zweiten Tabelle abrufen. Ok, vergessen wir den zweiten Teil des Prozesses. Um den ersten Teil zu erreichen benutze ich mysql und um den locId zu bekommen benutze ich den nächsten Code.Maxmind ip to city - mysql Indizierung
SELECT locId FROM first_table WHERE startIpNum<=IP and endIpNum>=IP LIMIT 1
Wo IP ist ein * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d (von ip => abcd, zB 197.248.67.1, a = 197, b = 248 .. und so weiter), das bedeutet, dass wir über Vergleiche zwischen ganzen Zahlen sprechen. Hier ist das Problem, diese Operation ist zu langsam. Mein zweiter Gedanke war, einen Index verwenden, also habe ich versucht, einen Index wie folgt zu verwenden:
CREATE INDEX test ON first_table (startIpNum,endIpNum,locId)
Vielleicht ist es nicht die beste Index der Welt, aber ich dachte, dass die beste Lösung für mein Problem war ... und Naja ... ist es nicht. Der Prozess ist immer noch ziemlich langsam wie 10 Sekunden. Irgendwelche Ideen???? Übrigens hat diese Tabelle fast 3,5 Millionen Zeilen. Aber ich kenne das Problem, es ist der Operator weniger als und mehr als, aber ich weiß nicht, was ich noch tun kann. Vielen Dank für Ihre Hilfe.
wie 6 Millionen, ich habe festgestellt, dass ich es mit mysql GIS machen kann, also werde ich in ein paar Tagen daran arbeiten ... – silgon