У меня есть данные OpenStreetMap для Нидерландов, загруженные в базу данных PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) с использованием схемы осмоса . Это означает, что все теги хранятся в поле hstore . В дополнение к индексу GIST, который осмос создает в поле геометрии, я создал дополнительный индекс GIST для поля тегов.
Пытаясь выполнить запрос, используя как пространственное ограничение, так и ограничение на поле тегов, я обнаружил, что это медленнее, чем хотелось бы. Запрос как этот:
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));
требуется 22 секунды, чтобы вернуть 78 записей.
В этой таблице около 53 миллионов записей.
Есть ли способ значительно ускорить это? Я слышал, что hstore реализован значительно лучше в PostgreSQL 9, поможет ли обновление?