Ho i dati OpenStreetMap per i Paesi Bassi caricati in un database PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) usando lo schema dell'osmosi . Ciò significa che tutti i tag sono memorizzati in un campo hstore . Oltre all'indice GIST che l'osmosi crea sul campo della geometria, ho creato un ulteriore indice GIST sul campo dei tag.
Cercando di eseguire una query utilizzando sia un vincolo spaziale che un vincolo sul campo dei tag, trovo che sia più lento di quanto vorrei. Una query come questa:
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));
impiega 22 secondi per restituire 78 record.
Ci sono circa 53 milioni di record in questa tabella.
C'è un modo per accelerare significativamente questo? Ho sentito che hstore è implementato significativamente meglio in PostgreSQL 9, l'aggiornamento potrebbe aiutare?