1

我正在尝试使用 maxmind 数据库来找出某个 ip 所在的城市。( http://www.maxmind.com/app/geolitecity ) 有 2 个表:
第一个表列:
startIpNum,endIpNum,locId
第二个表列:
locId,country,region,city,postalCode,latitude,longitude,metroCode,areaCode
快速解释:我使用第一个表来获取表的位置 id,然后我可以从第二个表中获取该位置的信息。好的,让我们忘记该过程的第二部分。为了完成第一部分,我使用了 mysql 并获取 locId,我使用了下一个代码。

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

其中 IP 为 a*256*256*256+b*256*256+c*256+d(来自 ip => abcd,例如 197.248.67.1、a=197、b=248... 等等)这意味着我们正在谈论整数之间的比较。问题来了,这个操作太慢了。我的第二个想法是使用索引,所以我尝试使用这样的索引:

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

也许它不是世界上最好的索引,但我认为这是解决我的问题的最佳方法......而且......它不是。这个过程仍然很慢,比如 10 秒。有任何想法吗????顺便说一句,这个表有将近 350 万行。但我知道问题在于操作员的问题,但我不知道我还能做什么。谢谢您的帮助。

4

1 回答 1

0

您的问题中有些事情不清楚:

查找 1 个 IP 需要 10 秒吗?

您要查找的城市有多少个 IP 地址?

这两个表是从 maxmind CSV 格式创建的,还是您的数据?

您是否使用了 maxmind 数据库的 CSV 格式?我建议使用二进制格式,它要快得多。

于 2012-04-13T11:14:01.397 回答