2016-10-19 21 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秒。