0

我们的业务用户喜欢按距离进行搜索,问题是我们有超过 100 万条带有纬度/经度位置的记录。我们正在使用 SQL 2008,但是当我们按距离排序或限制搜索时,我们一直遇到问题,因为查询需要很长时间(30 秒以上)。这是不可接受的,必须有更好的方法来做到这一点。我们已经用 SQL 2008 尽我们所能,如果可以的话,我们希望升级到 2012。

不过我问,是否有其他技术或优化可以应用。我们可以切换到不同的数据库以获得更快的性能,应用不同的搜索算法,估计算法,树,网格,预计算等吗?

4

1 回答 1

0

在这里可能有用的解决方案是将搜索分为两部分:

1) 运行查询,在其中找到位于当前位置的当前纬度/经度的某个值 + 或 - 内的所有记录,where 子句可能如下所示:

其中 (@latitude > (lat - .001) 和 @latitude > (lat - .001)) 和 (@longitude> (lng- .001) 和 @longitude> (longitude- .001))

使用这种方法,特别是使用纬度和经度列上的索引,您可以非常快速地定义指定距离内的一组工作位置。

2) 使用步骤 1 的粗略结果,使用大圆/半正弦法确定源位置与每个点之间的实际距离是多少。

这种方法失败的地方是,如果您正在搜索的半径从来没有任何限制,但如果您希望找到给定点特定距离内的所有位置,它会非常有效。

于 2012-04-24T03:05:54.633 回答