gpt4 book ai didi

mysql - GeoIP数据库SQL查询返回多个结果

转载 作者:行者123 更新时间:2023-11-29 11:59:35 24 4
gpt4 key购买 nike

我已经安装了 Maxmind GeoIP database现在我正在测试结果。我住在阿姆斯特丹,所以我用自己的 IP 地址进行了 IP 查询检查,但得到了 2 个结果。是我做错了什么还是数据不清楚?

数据库示例:

enter image description here

SQL查询:

SELECT * FROM wp_geoip WHERE '{my-ip-address}' BETWEEN begin_ip_num AND end_ip_num;

结果:

enter image description here

最佳答案

您不能仅将 IP 地址存储为 varchar。嗯...你可以,但是从根本上来说这是错误的。

正确的解决方案是将 IP 地址存储为它们实际表示的内容:无符号 32 位整数 (INT UNSIGNED)。

导入数据时使用 INET_ATON() built-in function 转换数据,它将点分四组 IPv4 地址转换为无符号整数。

使用反函数查询数据:

WHERE INET_NTOA('you.r.ip.add') BETWEEN begin_ip_num AND end_ip_num;

如果您在两个方向上索引开始和结束列,您将获得更好的性能,例如:

PRIMARY KEY(begin_ip_num,end_ip_num),
KEY(end_ip_num,begin_ip_num)

但是...B 树对于这种搜索并不是最佳的。

如果您使用spatial index,您还可以更快地查询它。 ,如Jeremy Cole explains in a blog post on the topic 。请注意,他还详细介绍了 INET_ATON()INET_NTOA() 的使用。

空间索引概念让一些人大吃一惊,因为他们认为“空间”仅意味着“地理空间”,但 IP 地址空间毕竟仍然是“空间” ”和 R-Tree MySQL 的空间扩展提供的索引比 B 树更适合搜索事物(如 IP 地址)占据的“空间”的边界。

关于mysql - GeoIP数据库SQL查询返回多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32603975/

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