我使用的是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)查看执行计划,我可以看到它没有使用我的空间索引

该表包含大约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)但实际上它的执行时间要长得多,有人能告诉我如何提高这个查询的性能吗?
谢谢
发布于 2013-09-10 18:38:20
添加WHERE子句以限制距离。
https://stackoverflow.com/questions/18339108
复制相似问题