SQL地理快速最近邻,按距离排序

时间:2012-01-27 18:44:37

标签: sql-server-2008 geography

我需要根据当前位置并在特定半径范围内提取地址列表。我们的默认搜索允许半径25英里,并且使用其他选项,返回大约5400个结果。我们已将地址存储为地理点,并创建了相当不错的搜索,但查询大约需要3秒钟才能运行。查看执行计划,我发现排序需要花费大量时间,这是有道理的。我该怎么做才能加快速度呢?我们并不关心它是否超精确,如此接近并且估计是可以的。我们使用的查询低于大多数其他过滤和分页逻辑。

declare @currentLatitude float, @CurrentLongitude float
declare @currentPosition geography
declare @radiusBuffer geography
Set @radiusBuffer = @currentPosition.BufferWithTolerance(10 * 1609.344,.9,1);
set @CurrentLatitude = 39.340579
set @CurrentLongitude = -86.697479
SET @currentPosition = geography::Point(@CurrentLatitude, @CurrentLongitude, 4326);

SELECT a.*,
ROW_NUMBER() OVER (ORDER BY rt.Position.STDistance(@currentPosition) ASC) AS RowNum
 from    [Address] a 
   where a.Position.Filter(@radiusBuffer) = 1

1 个答案:

答案 0 :(得分:1)

尝试使用“WHERE a.Position.STDistance(@currentPosition)&lt; 16093.44”,使用查询提示强制空间索引并使用“ORDER BY a.Position.STDistance(@currentPosition)”而不是ROW_NUMBER()。< / p>