我正在使用 SQL Server 地理数据类型将记录的位置存储在我的数据库中。我想选择给定位置给定距离内的所有记录:
DECLARE @location AS geography = geography::Point(@latitude, @longitude, 4326)
DECLARE @distance AS INT = 10000
SELECT *
FROM records
WHERE records.location.STDistance(@location) <= @distance
在我的测试数据库中有几十条记录,它运行得非常快,我没有任何问题,但我知道 WHERE 子句正在针对我数据库中的所有记录运行 STDistance,一旦我有数千条记录,它就会慢到爬行。
有一个更好的方法吗?也许创建某种区域并首先在相邻区域中选择数据?