Ich möchte alle Punkte innerhalb eines bestimmten Bereichs einer anderen Menge von Punkten abrufen. Nehmen wir an, alle Geschäfte im Umkreis von 500m von jeder U-Bahn-Station finden.
Ich habe diese Abfrage geschrieben, die ziemlich langsam ist und möchte sie optimieren:
%Vor%Ich verwende die neuesten Versionen von Postgres und PostGis (Postgres 9.5, PostGis 2.2.1)
Hier sind die Metadaten der Tabelle:
%Vor%Hier ist das Ergebnis von EXPLAIN (ANALYSE, BUFFERS):
%Vor%Ich kam schließlich zu der Schlussfolgerung, dass ich nicht leben konnte: Berechnen Sie die Entfernung zwischen Tausenden von Punkten von Interesse und Tausenden von Orten innerhalb einer realistischen Zeitspanne (& lt; 1 sec).
Ich berechne also alles vor: Jedes Mal, wenn ein Ort oder ein POI erstellt / aktualisiert wird, speichere ich den Mindestabstand zwischen jedem Ort und jeder Art von POI, um die Frage "Welche Orte sind näher als X?" beantworten zu können Meter von dieser Art von POI ".
Hier ist das Modul, das ich für diesen Zweck programmiert habe (es ist in Elixir, aber der Hauptteil ist Raw SQL)
%Vor%Ich denke, Sie sollten eine Lösung ändern, Postgis führt immer noch eine Abfrage in der Strukturierten Datenbank, es ist mächtig, aber nicht schnell in speziellen Anforderungen, möglicherweise brauchen Sie elasticsearch.
elasticsearch ist gut in der Geoortsuche, aber nicht gut im Geodatenprozess, ich denke, Sie brauchen beide.
Tags und Links sql postgresql nearest-neighbor query-performance postgis