Eu tenho dados do OpenStreetMap para a Holanda carregados em um banco de dados PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) usando o esquema de osmose . Isso significa que todas as tags são armazenadas em um campo hstore . Além do índice GIST que a osmose cria no campo geometria, criei um índice GIST adicional no campo tags.
Tentando consultar usando uma restrição espacial e uma restrição no campo tags, acho que é mais lento do que gostaria. Uma consulta como esta:
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));
leva 22 segundos para retornar 78 registros.
Existem cerca de 53 milhões de registros nesta tabela.
Existe uma maneira de acelerar significativamente isso? Ouvi dizer que o hstore é implementado significativamente melhor no PostgreSQL 9. A atualização ajudaria?