Performance GIST-Index

Hallo,

ich vergleiche gerade mehrere Abfragen in SQL
1.) räumliche Abfrage zwischen zwei Polygonen (ca. 830ms)

WHERE c.Geometry && ST_MakeEnvelope(3500060.29, 5392691.47, 3500277.065, 5393413.511)

2.) räumliche Abfrage ST_Contains zwischen Polygon (BoundingBox) und Point-Geometrie (ca. 830 ms)

WHERE ST_Contains( ST_MakeEnvelope(3500060.29, 5392691.47, 3500277.065, 5393413.511, 31467), a.centroid_geom)

3.) räumliche Abfrage ST_Intersection zwischen Polygon (BBox) und Point-Geometrie (ca 830ms)

WHERE ST_Intersects( ST_MakeEnvelope(3500060.29, 5392691.47, 3500277.065, 5393413.511, 31467), a.centroid_geom)

Das Ergebnis ist bei allen korrekt (c.geometrie = alle Polygone, a.centroid_geom = Centroid der Polygone aus c.Geometrie)!

Warum ist die Geschwindigkeit gleich?
Ich habe bei den letzeren beiden eine Abfrage zwischen Polygon und Punkt das heißt weniger Koordinaten die er vergleichen muss.
Außerdem habe ich den GIST-Index genommen-> Aber der ist glaube dieser bezieht sich nur auf BoundingBoxen. Heißt das er bringt für meine Punktgeometrie nichts?
Gibt es einen besseren Index für Punktgeometrie anstelle GIST?
Ansonsten wäre es wahrscheinlich vom Vorteil indiziierte Boxen zu nehmen als nicht indiziierte Punkte oder???

Geschwindigkeit:
Vermutlich liegt im Hintergrund ein ähnlicher/der gleiche Algorithmus.
Vergleich:
Es werden wahrscheinlich keine Koordinaten verglichen. Müsste mal suchen, wie das eigentlich genau gemacht wird.
Gist:
Es bringt schon sehr viel, wenn man sagen kann ob der Punkt in einer BBox liegt oder nicht.
Was Besseres für Punkte:
Nicht das ich wüsste. Bin auch ganz zufrieden damit (ich arbeite Geländemodellen, Fächerecholotdaten etc, i,d.R. ca. 100M-Punkte pro Datensatz)

Es wird immer erst ein Boundingbox-Vergleich gemacht. Danach wird mit diesem Ergebnis weiter verglichen. Das kann man aber folgendermassen etwas überlisten.
Man merkt das beispielsweise wenn man versucht Laserscandaten (sehr viele Punkte in einem großen Bereich) entlang eines Flußschlauchs (kleine schmale Fläche mit einer riesigen Boundingbox) selektieren will. Hier fallen viele sinnlose Punkte an weil eben viele in der Boundingbox liegen, aber sehr wenige in der eigentichen Fläche. Wenn man die Fläche des Flusses jedoch in kleine Polygone zerlegt geht die Abfrage um ein vielfaches schneller.

Hoffe ein wenig geholfen zu haben :wink:

Gruß Uwe