2016-10-19 20 views
0

存在包含空間數據的兩個MSSQL表:
- AddressPoints - 包含地址(點結構)
的地理位置 - 管道 - 包含管道的地理位置(LINESTRING結構)
點和最近的LINESTING之間的距離

地址點表應包含距離最近的管線段的距離。我目前正在嘗試編寫高效的查詢。我結束了以下查詢:

select a.ogr_fid, min(a.geom.STDistance(p.geom)) 
from AddressPoints a, Pipeline p 
group by a.ogr_fid 

但是,地址點和管道表包含大量的數據影響執行速度。 這兩個表都包含空間索引,但我不確定這個查詢是否利用它們。

+0

'MIN'表明你正在尋找最近鄰居的距離,而不是所有的距離。 [本MSDN文章](https://msdn.microsoft.com/en-us/library/ff929109.aspx)解釋瞭如何編寫使用空間索引的最近鄰居查詢。要求相當嚴格 –

回答

0

我想我已經找到可接受的解決方案:

select a.ogr_fid, min(a.geom.STDistance(p.geom)) 
from AddressPoint a 
inner join Pipeline p on a.geom.STDistance(p.geom) < 200 
group by a.ogr_fid 
order by a.ogr_fid 

這個查詢做相同的工作從問題的查詢。但它在1秒內執行。第一個查詢的執行時間是47秒。