Sql-Server

SQL Server - 使用空間數據

  • December 22, 2011

我將 SQL Server 2008 R2 用於實時位置感知服務。該服務主要從使用者接收位置數據(緯度/經度)並返回使用者周圍的位置。

數據每秒鐘從每個使用者發送一次。對於報告的每個位置,都有一個查詢來檢查該使用者周圍的其他使用者並返回有關他們的數據。

我使用 Lat/Lon 作為浮點欄位並執行標量函式來查找最近的使用者。

我想這種方法不是最好的。我知道 SQL Server 中有空間數據構造,但不知道它們是否好用。我應該使用它們嗎?如果是這樣,最好的方法是什麼?

我應該採取什麼方法來使此操作盡可能快速和可擴展?

也許 NoSQL 更適合空間數據?

PS - 我說的是在任何特定時間都有成千上萬的使用者。

是的,您應該使用空間索引,但您還應該考慮簡單的可搜尋性問題可以解決的限制。

空間索引有利於查找特定區域中的位置。這不利於計算出最短的距離。

所以……當試圖找到最近的項目時,從一小段距離開始並在該區域找到項目。就像是:

select id
from dbo.locations
where location.STIntersects(@point.STBuffer(@somedistance)) = 1;

…並慢慢增加 @somedistance 的值,直到找到所需的內容。這將允許完成搜尋,快速消除不感興趣的位置。

引用自:https://dba.stackexchange.com/questions/9028