1

我以映射到位置数据的 IP 地址范围表的形式向我提供了地理定位服务的原始数据。

地址以字节打包整数(每个字节一个点分四边形)的形式提供,便于存储和比较,因此该表中的每一行都提供了一个范围低地址、一个范围高地址和一些文本位置字段。我不必/不能使用 CIDR。

该表有几百万条记录。

我没有强大的 SQL 能力。我继承的代码只是做了一个 sql 调用,如:

SELECT location FROM geodata WHERE lookup_address >= range_low AND lookup_address =< range_high

表演很糟糕。我的理解是,这只会对匹配记录进行线性搜索。为了暂时解决这个问题,我将客户端缓存放在树图中以降低日志性能,但是a)我的内存使用现在很难证明,并且b)检测实时数据库更新是我不知道的问题真想马上解决。

似乎这个问题必须不时出现在地址、电话号码等的 SQL 世界中。是否有一种“标准”方式来组织和索引 SQL 表中的范围,以便我至少可以获得日志性能的直接 SQL 查询?

4

1 回答 1

0

检查您的过滤器字段是否有索引 - 在这种情况下range_lowrange_high.

CREATE INDEX IX_geodata_range_fields ON geodata (range_low, range_high)
于 2013-09-10T18:22:22.247 回答