我正在寻找将MaxMind free GeoIP database导入SQL服务器,然后发出查询以查找给定IP地址的IP范围

我现在可以想到两种方法:

  • 为每个IPv4网络前缀Stroing bitmask int32值,然后为每个可能的网络前缀长度计算IP的网络前缀,并在网络前缀列中查找前缀 . 我可以从最常见的前缀长度开始,无论它是什么,并继续使用不常见的前缀长度,直到找到记录 .

在int32列上有一个索引应该使equals查询快速,但我可能必须为每个网络前缀长度发出多个查询 .

  • 使用2列存储每个范围的起始和结束IP,然后在WHERE子句中使用between .

这避免了潜在的多个查询,但我不确定这与单个等于查询相比有多快 .

哪种方法更快?