gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:39:16 24 4
gpt4 key购买 nike

我有一个地理编码数据库,每行都有整数范围(相当于 ip 地址) fromip (长)toip (长的)。整数是由 php ip2long 从 ip 地址创建的

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

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

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

更多信息:

explain select * from ipranges where ipfrom <= 2130706433 and ipto >= 2130706433 order by ipfrom Asc limit 1|

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

PRIMARY KEY (ipfrom,ipto)

这似乎根本没有效率。 (上面的ip不在范围内)

最佳答案

您的查询很好,在 (fromip, toip) 上放置一个索引,这将是查询的覆盖索引。根本不需要检查表,只搜索排序的索引,这是尽可能快的。

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

关于mysql - 在mysql中查询ip范围的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4791264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com