[英]Select records from a SQL Server database using geography and distance
我使用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,一旦我有數千條記錄,它就會慢慢爬行。
有一個更好的方法嗎? 也許創建某種區域並首先在鄰近區域選擇數據?
你絕對想要設置@Twelfth建議的空間索引。 您還希望對范圍進行搜索,而不是距離以更好地利用空間索引。
DECLARE @location AS geography = geography::Point(@latitude, @longitude, 4326)
DECLARE @distance AS INT = 10000
DECLARE @range AS geography = @location.STBuffer(@distance)
SELECT *
FROM records
WHERE records.location.STIntersects(@Range) = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.