Saya memiliki data OpenStreetMap untuk Belanda yang dimuat ke dalam database PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) menggunakan skema osmosis . Ini berarti semua tag disimpan di bidang hstore . Selain indeks GIST yang dibuat osmosis pada bidang geometri, saya membuat indeks GIST tambahan pada bidang tag.
Mencoba membuat kueri menggunakan batasan spasial dan batasan pada bidang tag, saya menemukan bahwa ini lebih lambat daripada yang saya inginkan. Kueri seperti ini:
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));
Dibutuhkan 22 detik untuk mengembalikan 78 catatan.
Ada sekitar 53 juta catatan dalam tabel ini.
Apakah ada cara untuk mempercepat ini secara signifikan? Saya pernah mendengar bahwa hstore diimplementasikan secara signifikan lebih baik di PostgreSQL 9, akankah meningkatkan bantuan?