J'ai des données OpenStreetMap pour les Pays-Bas chargées dans une base de données PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) en utilisant le schéma d'osmose . Cela signifie que toutes les balises sont stockées dans un champ hstore . En plus de l'index GIST que l'osmose crée sur le champ géométrique, j'ai créé un index GIST supplémentaire sur le champ tags.
En essayant d'interroger en utilisant à la fois une contrainte spatiale et une contrainte sur le champ des balises, je trouve que c'est plus lent que je ne le souhaiterais. Une requête comme celle-ci:
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));
prend 22 secondes pour renvoyer 78 enregistrements.
Il y a environ 53 millions d'enregistrements dans ce tableau.
Existe-t-il un moyen d'accélérer considérablement cette opération? J'ai entendu dire que hstore est implémenté beaucoup mieux dans PostgreSQL 9, la mise à niveau serait-elle utile?