繁体   English   中英

在mysql中查询IP范围的最有效方法

[英]The most efficient way to query ip ranges in mysql

我有一个地理编码数据库,每行fromip (long) toip (long)的整数(ip地址等效)范围。 整数是通过php ip2long从IP地址创建的

我需要找到给定IP地址(转换为long)在该范围内的行。

什么是最有效的方法? (键和查询)

如果我这样做(天真的解决方案),请select * from ipranges where fromip <= givenip and toip >= givenip limit 1关键fromip, toip 然后,对于IP地址不在任何给定范围内的情况,搜索将遍历所有行。

更多信息:

解释iprange中的select *,其中ipfrom <= 2130706433和ipto> = 2130706433由ipfrom Asc限制1 |

给了我250万行(表中总计360万行)。 关键是:

主键( ipfromipto

似乎根本没有效率。 (上述ip不在任何范围内)

您的查询很好,在(fromip,toip)上放置一个索引,该索引将成为查询的覆盖索引。 完全不必检查该表,只搜索排序的索引,这是最快的。

搜索实际上不会遍历所有行。 它不仅将不经过任何行,仅通过索引,而且也不会检查索引中的每个条目。 索引存储为排序树,只有遵循该树的一条路径才能确定您的IP不在表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM