我有一个1.6M IP范围的表,其中包含组织名称.
IP地址将转换为整数.该表的形式为:
我有一个2000个唯一的IP地址列表(例如321223,531223,….)需要转换为组织名称.
我将转换表加载为mysql表,其中包含IP_from和IP_to的索引.我循环访问2000个IP地址,每个IP地址运行一个查询,15分钟后报告仍在运行.
我正在使用的查询是
select organization from iptable where ip_addr BETWEEN ip_start AND ip_end
有没有更有效的方法来进行批量查找?如果这是一个很好的解决方案,我会用手指.如果某人有特定于Ruby的解决方案,我想提一下我正在使用Ruby.
解决方法:
鉴于你已经有了ip_start的索引,这是如何最好地使用它,假设你想要为每个IP进行一次访问(在本例中为1234):
select organization from (
select ip_end, organization
from iptable
where ip_start <= 1234
order by ip_start desc
limit 1
) subqry where 1234 <= ip_end
这将使用您的索引启动扫描,该扫描由于限制1而立即停止.成本应仅略高于简单索引访问的成本.当然,这种技术依赖于ip_start和ip_end定义的范围永不重叠的事实.
原始方法的问题在于MysqL不知道这个约束,只能使用索引来确定启动或停止扫描的位置(它认为),以便查找查询的所有匹配项.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。