我正在嘗試查找距給定座標一定距離內的位置。在一張有大約32k記錄查詢的表上,大約需要2秒鐘 - 這太慢了,imo。空間查詢 - 性能較差,未使用索引
它正在做一個聚集索引掃描,這是邏輯的 - 它必須計算每個位置的距離。但是,我仍然認爲這應該比這個小的數據集更快。我確實已經定義了空間索引,但是它沒有被使用,並且如果我迫使它查詢失敗。
大多數計算的距離都花在濾波器的時間(〜86%) - 所以我正在尋找一個方法來優化這個問題,我在這裏需要一些幫助..
查詢我m使用是這樣的:
SELECT Name
FROM Venue
WHERE (Coordinates.STDistance(geography::STPointFromText('POINT(-113.512245 51.498212)', 4326))/1000) <= 100
[SQL Server 2008空間數據功能對映射查詢有用嗎?]的可能的重複?(http://stackoverflow.com/questions/1343293/are-sql-server-2008-spatial-data-features-useful-for -shipping-queries) – TomTom
爲什麼在StDistance子句中除以1000?這可以在別處計算嗎? – CatchingMonkey
更改爲WHERE Coordinates.STDistance(geography :: STPointFromText('POINT(-113.512245 51.498212)',4326))<= 100000將允許使用空間索引作爲主要過濾器而不是表掃描。如果你使用SQL 2008,你可能仍然需要一個明確的索引提示。 –