0

我有 GEO ip 位置数据库,其中每个国家/地区都有与其关联的 IP 范围。

country | ip_start | ip_end

我有一个非常大的 ip 列表(100 万),我需要通过在 geo_database 中查找将每个 ip 与正确的国家/地区相关联。

我目前使用这个低效的查询(Python btw):

"SELECT * FROM geoipv4_country WHERE %s BETWEEN start_integer AND end_integer" % myDict[ipnum]"

正如您所看到的,对列表中的每个 ip 执行此操作将花费大量时间,因为对于每个 ip,我都需要查询数据库。

有没有一种很好的有效方法来做到这一点?

先感谢您

4

1 回答 1

1

首先,创建一个包含大量 IP 地址的表:

CREATE TABLE ip_list (
    ipnum INTEGER
);
INSERT INTO ip_list (ipnum) VALUES
    (<ip1>), (<ip2>), (<ip3>), (<ip4>), ..., (<ipN>);

然后,您可以使用如下查询获取您的列表:

SELECT i.ipnum, c.country
FROM geoipv4_country с,
     ip_list         i
WHERE i.ipnum BETWEEN c.start_integer
                  AND c.end_integer

这假设geoipv4_country表中的范围不能重叠。

为了使其高效,请确保至少具有以下索引:

CREATE INDEX c1 ON geoipv4_country(start_integer);
CREATE INDEX c2 ON geoipv4_country(end_integer);
于 2013-05-20T09:14:59.233 回答