Ich habe OpenStreetMap-Daten für die Niederlande mit dem Osmoseschema in eine PostGIS-Datenbank (PostgreSQL 8.3 / PostGIS 1.3.3) geladen . Dies bedeutet, dass alle Tags in einem Speicherfeld gespeichert werden. Zusätzlich zum GIST-Index, den die Osmose für das Geometriefeld erstellt, habe ich einen zusätzlichen GIST-Index für das Tags-Feld erstellt.
Wenn ich versuche, sowohl eine räumliche Einschränkung als auch eine Einschränkung für das Tags-Feld zu verwenden, stelle ich fest, dass es langsamer ist, als ich es gerne hätte. Eine Abfrage wie diese:
SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n
INNER JOIN users AS u ON n.user_id = u.id
WHERE tags->'man_made'='surveillance'
AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326));
Es dauert 22 Sekunden, um 78 Datensätze zurückzugeben.
In dieser Tabelle befinden sich rund 53 Millionen Datensätze.
Gibt es eine Möglichkeit, dies erheblich zu beschleunigen? Ich habe gehört, dass hstore in PostgreSQL 9 deutlich besser implementiert ist. Würde ein Upgrade helfen?