【发布时间】:2011-09-05 11:06:47
【问题描述】:
我有一个充满客户的大型数据库,在 sql server 2005 中实现。每个客户都有一个纬度和经度,表示为Decimal(18,15)。数据库中最重要的搜索查询试图找到靠近某个位置的所有客户,如下所示:
(Addresses.Latitude - @SearchInLat) BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)
所以,这是一个非常简单的方法。 @LatitudeBound 和 @LongitudeBound 只是数字,用于将所有客户拉回点 @SearchInLat, @SearchInLng 的粗略边界矩形内。一旦结果到达客户端 PC,就会过滤掉一些结果,从而形成一个边界圆而不是矩形。 (这是在客户端 PC 上完成的,以避免在服务器上计算平方根。)
这种方法在过去运行良好。然而,我们现在想让搜索做更多有趣的事情——例如,让返回的结果数量更可预测,或者让用户动态增加搜索半径的大小。为此,我一直在研究升级到 sql server 2008 的可能性,包括 Geography 数据类型、空间索引和距离函数。我的问题是:这些速度有多快?
我们目前拥有的简单查询的优点是速度非常快且不占用大量性能,这很重要,因为它经常被调用。基于这样的查询的速度有多快:
SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound
比较?空间索引是否运行良好,STDistance 是否快?
【问题讨论】:
标签: sql-server-2008