SQL中可搜索的IP地址范围的高效表结构或索引

时间:2013-09-10 14:30:02

标签: sql performance range ip-address

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

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

该表有数百万条记录。

我没有强大的SQL排骨。我继承的代码只是执行一个sql调用,如:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

CREATE INDEX IX_geodata_range_fields ON geodata (range_low, range_high)