簡體   English   中英

使用地理位置和距離從SQL Server數據庫中選擇記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM