【发布时间】:2011-01-25 08:25:07
【问题描述】:
我有一个地理编码数据库,每行都有整数范围(相当于 IP 地址)
fromip(长)toip(长)。整数是由 php ip2long 从 ip 地址创建的
我需要找到给定IP地址(转换为长)在该范围内的行。
最有效的方法是什么? (键和查询)
如果我这样做(天真的解决方案)select * from ipranges where fromip <= givenip and toip >= givenip limit 1 并且 key 是 fromip, toip。然后对于 IP 地址不在任何给定范围内的情况,搜索将遍历所有行。
更多信息:
解释 select * from ipranges where ipfrom = 2130706433 由 ipfrom Asc 订购 限制1|
给了我 250 万行(表中总共 360 万行)。 关键是:
主键 (
ipfrom,ipto)
这似乎根本没有效率。 (上面的ip不在任何范围内)
【问题讨论】: