2016-10-19 5 views
0

Es gibt zwei MSSQL Tabellen, die räumliche Daten enthalten:
- AddressPoints - enthält geolocation von Adressen (POINT Struktur)
- Pipeline - enthält Geolokation der Rohrleitung (LINESTRING Struktur)
Abstand zwischen dem Punkt und dem nächsten LINESTING

Die AddressPoints-Tabelle sollte Abstand vom nächsten Pipeline-Segment enthalten. Ich versuche gerade, effiziente Abfrage zu schreiben. Ich endete mit folgenden Abfrage nach oben:

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

jedoch AddressPoints und Pipeline Tabellen riesige Menge an Daten enthalten, die Ausführungsgeschwindigkeit auswirkt. Beide Tabellen enthalten räumliche Indizes, aber ich bin nicht sicher, ob diese Abfrage sie verwendet.

+0

'MIN' schlägt vor, dass Sie nach der Entfernung des nächsten Nachbarn suchen, nicht nach allen Entfernungen. [In diesem MSDN-Artikel] (https://msdn.microsoft.com/en-us/library/ff929109.aspx) wird erläutert, wie Sie eine Abfrage für den nächsten Nachbarn schreiben, die räumliche Indizes verwendet. Die Anforderungen sind eher streng –

Antwort

0

Ich denke, dass ich akzeptable Lösung gefunden haben:

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 

Diese Abfrage macht die gleiche Arbeit wie Abfrage von Frage. Es wird jedoch in 1 Sekunde ausgeführt. Ausführungszeit der ersten Abfrage beträgt 47 Sekunden.

Verwandte Themen