我有一个ip2location服务的订阅,它提供了这种格式的sql表
FromIP (int), ToIP(int), lat, long, city etc etc
我想分析我的访问日志并对所有用户进行分类
访问日志有IP地址和用户ID(比如说)
所以我运行一个查询
select city from ip2location where FromIP <= $ipAsInt AND ToIP => $ipAsInt
但是这需要太长的时间来分析超过一百万条的记录。我想这一定是IP2位置的一个非常常见的用法。有可能优化结构吗?
最佳答案
您也可以这样编写查询
select city,ToIP from ip2location where ToIP >= $ipAsInt order by ToIP limit 1
这将比以前快得多。
还可以为toip列编制索引以提高性能。
正如ip2location所建议的,您可以使用
ALTER TABLE ip2location ADD PRIMARY KEY(FromIP,ToIP);