我有一个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);

10-07 17:10