Ich habe zwei Tabellen, die ich gerne schneiden würde. Die erste Tabelle repräsentiert etwa 50 Millionen Punkte und die zweite eine Polygonschicht aller Länder der Welt. Ich möchte alle Punkte erhalten, die sich mit diesem Polygon schneiden.Postgresql Spatial Query zu langsam
SELECT d.id, d.geom
FROM export d, world_boundaries b
WHERE (b.cntry_name = 'UK')
AND d.date_inserted >= '2012-06-01'
AND d.geom && b.wkb_geometry
AND intersects(d.geom, b.wkb_geometry);
Diese Abfrage ist sehr einfach, dauert aber mehr als 4 Stunden. Ich habe GIST-Indizes auf der Geometrie-Spalte für jede Tabelle erstellt und VACUUM ANALYSE sie beide. Noch keine Leistungssteigerung. Ich betreibe CENTOS 6 mit Postgres 8.4 und PostGIS 1.5. Kann jemand etwas Licht in die Sache bringen? Ich bekomme sehr schnell Ergebnisse, wenn ich die Abfrage auf 1000 bis 10000 Datensätze LIMITIERE. Wenn ich versuche, das volle Ergebnis zu erfassen, zieht es sich zurück. Gedanken?
UPDATE: Ich sehe jetzt, dass ich meine Abfrage als einen ersten Schritt in diesem Prozess verfeinern muss. Ich bekomme den Umschlag wie folgt
select astext(st_envelope(wkb_geometry)) as e
from world_borders
where cntry_name = 'UK'
Nun, was ist der effizienteste Weg, um dies als Teil der gesamten Abfrage einzuschließen/ausführen?
Jede der letzten Versionen hat die GiST- und GIN-Indizes verbessert. Möglicherweise möchten Sie ein Upgrade auf eine neue Hauptversion in Betracht ziehen. Es könnte sich sogar lohnen, Ihr Problem mit der 9.2 Beta-Version zu versuchen, da es SP-GiST enthält. http://www.postgresql.org/docs/9.2/static/spgist-intro.html – kgrittn