我正在使用 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)
但实际上执行需要更多时间,有人可以告诉我如何提高此查询的性能吗?
谢谢