我们的商业用户喜欢我们的搜索是通过距离完成的,问题是我们有超过100万条记录,有一个纬度/经度。我们正在使用SQL 2008,但是当我们按照查询占用距离(30秒加)的距离来命令或限制搜索时,我们会遇到问题。这是不可接受的,必须有一个更好的方法来做到这一点。我们已经尽力使用SQL 2008,并希望在某些时候升级到2012年。
我问,如果我们可以应用其他技术或优化。我们可以切换到不同的DB以获得更快的性能,应用不同的搜索算法,估计算法,树,网格,预计算等吗?
答案 0 :(得分:0)
这里可能有用的解决方案是将搜索分为两部分:
1)运行一个查询,您可以在其中查找位于当前纬度/经度的某个值+或 - 内的所有记录,其中where子句可能如下所示:
其中(@latitude&gt;(lat - .001)和@latitude&gt;(lat - .001))和(@ longitude&gt;(lng- .001)和@ longitude&gt;(经度 - .001))< / p>
使用这种方法,特别是纬度和经度列的索引,您可以非常快速地定义指定距离内的一组工作位置。
2)使用步骤1的粗略结果,使用大圆/半正方法确定源位置与每个点之间的实际距离。
如果您正在搜索的半径绝对没有任何限制,那么这种方法会失败,但如果您想要找到给定点的特定距离内的所有位置,那么它会很有效。