Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 按距离排序的SQL地理快速近邻_Sql Server 2008_Geography - Fatal编程技术网

Sql server 2008 按距离排序的SQL地理快速近邻

Sql server 2008 按距离排序的SQL地理快速近邻,sql-server-2008,geography,Sql Server 2008,Geography,我需要根据当前位置并在一定半径内提取地址列表。我们的默认搜索允许半径为25英里,使用其他选项,将返回大约5400个结果。我们已经将地址存储为地理点,并创建了一个相当不错的搜索,但查询运行大约需要3秒钟。查看执行计划,我发现排序花费的时间最多,这是有道理的。我能做些什么来加快速度?我们不在乎它是超精确的,所以足够接近,估计是可以的。我们正在使用的查询减去大部分其他过滤和分页逻辑 declare @currentLatitude float, @CurrentLongitude float decl

我需要根据当前位置并在一定半径内提取地址列表。我们的默认搜索允许半径为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

尝试使用“WHERE a.Position.STDistance(@currentPosition)<16093.44”,使用带有查询提示的空间索引,并使用“ORDER BY a.Position.STDistance(@currentPosition)”代替ROW_NUMBER()。

但我使用ROW_NUMBER进行分页,如果没有它,则有点违背存储过程的目的(是的,我知道我可以使用临时表来伪造它)。您必须使用Order By进行该查询。看看你链接到一篇只与SQL 2012相关的文章,我使用的是2008。