2012-04-06 21 views
1

私はいくつかのipの都市を見つけるためにmaxmindデータベースを使用しようとしています。 (http://www.maxmind.com/app/geolitecity) 2つのテーブルがあります
第1表の列:
startIpNum、endIpNum、LOCID
第2表の列:
LOCID、国、地域、都市、postalCodeの、緯度、経度、metroCode、areaCode
クイック説明: 最初のテーブルを使用してテーブルの位置IDを取得し、次にそのテーブルの情報を2番目のテーブルから取得できます。さて、プロセスの第2部分について忘れてみましょう。最初の部分を達成するために、私はmysqlを使用してlocIdを取得するために次のコードを使用します。 IPは、* 256 * 256 * 256 + B * 256 * 256 + C * 256 + IP =からD(> ABCD、例えば197.248.67.1であるMaxmindから都市へ - mysqlのインデックス

SELECT locId FROM first_table WHERE startIpNum<=IP and endIpNum>=IP LIMIT 1 

、= 197、B = 248 ..これは、整数間の比較について話していることを意味します。 問題がありますが、この操作は遅すぎます。私の第二の考えは、インデックスを使用していたので、私はこのようにインデックスを使用しようとしました:

CREATE INDEX test ON first_table (startIpNum,endIpNum,locId) 

たぶんそれは、世界の最高の指標ではありませんが、私はそれは私の問題に対する最善の解決策だと思った...とまあ...そうではありません。このプロセスはまだ10秒ほど遅いです。何か案は???? ところで、この表にはおよそ3.5百万行があります。しかし、私はオペレーターがそれ以下であるという問題を知っていますが、他に何ができるのか分かりません。 ありがとうございます。

答えて

0

いくつかのものは、あなたの質問から明らかではありません。

それは1 IPをルックアップするために10秒かかりますか?

都市を探しているIPアドレスはいくつですか?

これらの2つのテーブルは、maxmind CSV形式から作成されたものであるか、それともあなたのデータですか?

maxmindデータベースのCSV形式を使用しましたか?私は、バイナリ形式を使用することをお勧めします、それははるかに高速です。

+0

は6百万のように、私はmysql GISでそれを行うことができることを発見したので、数日後に作業を進めていきます... – silgon

関連する問題