У мене є дані 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, чи допоможе оновлення?