最近邻搜索查询性能

4
我正在使用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个回答

1
在SQL语句中添加一个WHERE子句以限制距离。

“where”子句的例子是什么? - twoLeftFeet
1
我恐怕忘记了三年前的想法,但可能是类似于 WHERE LastLocation.STDistance(@Location) < 10000 这样的东西。 - Michel de Ruiter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接