Räumliche Abfrage optimieren: Alle Gebäude im Umkreis von 5 Meilen effizient finden
In diesem Artikel wird ein häufiges räumliches Problem untersucht: das Abrufen aller Gebäude innerhalb eines bestimmten Radius von einem bestimmten Koordinatenpunkt. Die direkte Verwendung der ST_CONTAINS
-Funktion ist möglicherweise nicht effizient, daher werden in diesem Artikel bessere Lösungen untersucht.
Die Bedeutung der Datendarstellung
Bevor wir auf die technischen Details eingehen, ist es wichtig, die Bedeutung einer korrekten Datendarstellung hervorzuheben. Das Speichern von Geodaten als separate Längen- und Breitengradspalten führt zu Ineffizienzen bei Abfragevorgängen. Zu diesem Zweck wird dringend empfohlen, die Datentypen geometry
oder geography
zu verwenden, die zwei Koordinaten in einem einzigen Feld kapseln.
Verwenden Sie ST_DWithin, um Näherungsabfragen effizient durchzuführen
ST_DWithin
ist eine leistungsstarke Funktion, die direkt prüft, ob zwei Geometrien innerhalb eines bestimmten Abstands liegen. Indem wir den Suchradius in Meter umrechnen und ihn mit der mit ST_DWithin
berechneten Entfernung vergleichen, können wir Gebäude innerhalb des gewünschten Bereichs effizient identifizieren.
<code class="language-sql">SELECT name, long, lat FROM building WHERE ST_DWithin( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat), 8046.72 ); -- 8046.72 米 = 5 英里</code>
Verwenden Sie ST_Distance, um die konvertierte Meilenentfernung zu verarbeiten
Alternativ können Sie ST_Distance
verwenden, um den Abstand zwischen geometrischen Formen zu berechnen. Die Ausgabe erfolgt zunächst in Metern, wir können sie jedoch mithilfe eines einfachen Multiplikationsfaktors in Meilen umrechnen:
<code class="language-sql">SELECT name, long, lat, ST_Distance( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat) ) * 0.000621371 AS distance FROM building WHERE distance < 5;</code>
Hinweis: Bei Verwendung von ST_Distance
müssen räumliche Abfragen mithilfe von Indizes effizient verarbeitet werden. Obwohl ST_Distance
selbst keine Indizierung unterstützt, kann die Erstellung eines räumlichen Indexes für ST_GEOMETRY
die allgemeine Abfrageleistung optimieren.
Zusammenfassung
Durch die Erforschung alternativer Ansätze und den Schwerpunkt auf die Optimierung der Datendarstellung demonstrieren wir eine Methode zum effizienten Abrufen von Gebäuden innerhalb eines bestimmten Bereichs. Die in diesem Dokument vorgestellten Techniken bieten Skalierbarkeit und Leistungsverbesserungen für räumliche Abfragen in realen Anwendungen.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient alle Gebäude im Umkreis von 5 Meilen um einen bestimmten Punkt finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!