我有一個龐大的客戶數據庫,在sql server 2005中實現。每個客戶都有一個經度和緯度,表示爲Decimal(18,15)
。在數據庫中最重要的搜索查詢試圖找到接近到一定位置,這樣所有的客戶:sql server 2008中的地理數據類型有多好?
(Addresses.Latitude - @SearchInLat) BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ((Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)
所以,這是一個非常簡單的方法。 @LatitudeBound
和@LongitudeBound
只是數字,用於在點@SearchInLat, @SearchInLng
的粗糙邊界矩形內拉回所有客戶。一旦結果到達客戶端PC,一些結果將被過濾掉,以便出現一個邊界圓而不是矩形。 (這是在客戶端PC,以避免在服務器上計算平方根上完成的。)
這種方法已經足夠好了過去。然而,我們現在想讓搜索做更有趣的事情 - 例如,拉回的結果數量更具可預測性,或者讓用戶動態增加搜索半徑的大小。爲了做到這一點,我一直在研究使用它的Geography數據類型,空間索引和距離函數對sql server 2008進行ugprading的可能性。我的問題是:這些速度有多快?
我們此刻的簡單查詢的優點是,它是非常快,不是性能密集型的,因爲它是所謂往往是很重要的。
SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound
是通過比較:如何快速將查詢各地像這樣根據?空間索引是否正常工作,並且STDistance是否快速?