SQL Geography Fast Nearest-neighbor,按距离排序

Posted

技术标签:

【中文标题】SQL Geography Fast Nearest-neighbor,按距离排序【英文标题】:SQL Geography Fast Nearest-neighbor with order by distance 【发布时间】:2012-01-27 18:44:36 【问题描述】:

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

尝试使用“WHERE a.Position.STDistance(@currentPosition)

【讨论】:

但是我使用 row_number 来进行分页,没有它它有点违背存储过程的目的(是的,我知道我可以使用临时表来伪造它)。 您必须为该查询使用 Order By。看msdn.microsoft.com/en-us/library/ff929109.aspx 您链接到的文章仅与 SQL 2012 相关,我使用的是 2008。

以上是关于SQL Geography Fast Nearest-neighbor,按距离排序的主要内容,如果未能解决你的问题,请参考以下文章

SQL geography::EnvelopeAggregate 输出不准确

在 Django 中使用 GEOGRAPHY 列更新 SQL Server 表

确定一个 POINT 是不是位于 LINESTRING 上的两个其他 POINT 之间(SQL Server 2008 Geography)

LINQ to SQL Designer和Geography数据类型

为啥 SQL Server GEOGRAPHY 允许 -15069° 和 +15069° 之间的经度?为啥是±15069°?

如何测试 SQL Server Geography 列的值是不是为 POINT(0 0)?