1

我在 MySQL 服务器中有一个数据库,其中包含有关 ip 范围和位置的信息,它具有下一个结构:

id (integer not null, auto inc)
from_ (bigint(20))
to_ (bigint(20))
region(integer)

字段区域是表城市(id,city_name)的外键。

正如我们所知,要确定 IP 地址属于哪个国家/地区,我们必须执行类似下一个查询的操作:

select region from ipcountry where ip >= from_ and ip <= to_

由于记录的数量,查询对于我需要的内容来说为时已晚。

有什么想法可以优化这个问题吗?

4

1 回答 1

0

你有索引吗(from_, to_)?那是开始的地方。

然后,下一个想法是拥有索引并将查询更改为:

select region
from ipcountry
where ip >= from_
order by from_ desc
limit 1;

如果这不能提高性能,那么您将不得不考虑如何优化数据结构。这里的极端方法是列出所有 IP 地址及其所在地区。但是,数十亿的结果行实际上可能会影响性能。

如果你走这条路,你需要变得更聪明。一种想法是为具有恒定区域的 A 类、B 类和 C 类地址设置单独的表。然后是 D 类地址范围的单独表格。

于 2013-05-23T00:57:50.447 回答