Performance von Views

Hallo PostgreSQLer,

ich arbeite oft mit vielen Views, die Abfragen laufen dabei meistens über PostGIS Funktionen und sind dementsprechend langsam. Nun möchte ich nachfragen ob es Möglichkeiten zur Performancesteigerung bei Views gibt. Mir ist vor allem ein Abfrage-Caching wichtig, so dass ein bereits generiertes View gecached werden kann und bei wiederholtem Aufruf nur die gecachten Daten geliefert werden, wenn die Ausgangstabellen sich nicht verändert haben. Ich weiß, das es bei MySQL diese Möglichkeit besteht und hoffe, dass es für Postgres so etwas auch gibt.

Gruß aus Iserlohn

Evgeni T.

Nein. Ein VIEW ist nur die Definition einer Abfrage. Diese Definition ist gespeichert, mehr nicht. Bei einem Zugriff auf eine VIEW wird die Abfrage ausgeführt.
Um also eine VIEW zu beschleunigen, muß man die Abfrage beschleunigen. Punkt.


Du kannst aber hier mal nachlesen: Materialized Views in PostgreSQL

Andreas

Danke für den Link! :smiley:

Leider kann ich die Abfrage kaum beschleunigen. Die Geometrien-Spalten sind bei mir schon mit GIST indexiert, aber die graphischen JOINs mit contains(), intersects(), u.a. Funktionen aus PostGIS sind nun mal sehr rechenintensiv und da kenne ich keinen Weg dran vorbei.

Um dir das mit den Views mal zu verdeutlichen: führe mal ein EXPLAIN für einen deiner Views aus und den EXPLAIN auch für die Abfrage hinter dem View. Du wirst sehen, dass beide gleich sind.

Um dir das mit den Views mal zu verdeutlichen führe mal einen EXPLAIN auf einen View aus und einen EXPLAIN auf die Abfrage, die sich hinter dem View versteckt.
Du wirst sehen, dass beide Ausgaben gleich sind.

blöde Forensoftware

Egal, zum eigentlichen Problem: wie sieht denn ein EXPLAIN für so eine langsame Anfrage aus?

Welches PostGIS/geos-library benutzt du denn? Seit 1.4 hat sich da einiges verbessert beim Vergleich von Geometrien. Andernfalls kannst du versuchen, per SQL den Umfang der zu selektierenden Geometrien vorab soweit wie möglich zu reduzieren.
Falls du große, unregelmässige Polygone hast, die mit viel Kleinkram verschnitten werden solltest du auf jeden Fall PostGIS 1.4/geos 3.1 verwenden, ggf könntest du hier die Polgone auch noch in kleinere Rasterquadrate zerlegen, so das nicht jeder Fussel mit dem Riesenpolygon verschnitten werden muß.

Gruß Uwe