最近邻搜索查询性能

时间:2013-08-20 15:29:48

标签: sql performance sql-server-2012

我正在使用Microsoft SQL Server 2012,我有一个简单的查询,可以选择最接近特定点排序的前50位用户,例如:

DECLARE @Location geography = geography::Point(30.9384016, 29.9582148, 4326)

SELECT TOP 50 * 
FROM Users  
ORDER BY LastLocation.STDistance(@Location)

查看执行计划,我可以看到它没有使用我的空间索引

enter image description here

该表包含大约40,000条记录,查询执行时间超过1分钟,我的空间索引创建如下:

create spatial index IX_Location ON Users (LastLocation) using GEOGRAPHY_AUTO_GRID

我尝试在查询中使用提示并指定索引,如下所示:

DECLARE @Location geography = geography::Point(30.9384016, 29.9582148, 4326)

SELECT TOP 50 * 
FROM Users WITH (INDEX(IX_Location)) 
WHERE LastLocation.STDistance(@Location) IS NOT NULL 
ORDER BY LastLocation.STDistance(@Location)

但实际上需要花费更多时间执行,有人可以告诉我如何才能提高此查询的性能?

由于

1 个答案:

答案 0 :(得分:1)

添加WHERE子句以限制距离。