Mam dane OpenStreetMap dla Holandii załadowane do bazy danych PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) przy użyciu schematu osmozy . Oznacza to, że wszystkie tagi są przechowywane w polu hstore . Oprócz indeksu GIST, który osmoza tworzy na polu geometrii, utworzyłem dodatkowy indeks GIST na polu tagów.
Próbując wykonać zapytanie przy użyciu zarówno ograniczenia przestrzennego, jak i ograniczenia w polu znaczników, stwierdzam, że jest on wolniejszy niż chciałbym. Zapytanie takie jak to:
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));
Zwrócenie 78 rekordów zajmuje 22 sekundy.
W tej tabeli znajduje się około 53 milionów rekordów.
Czy istnieje sposób, aby znacznie to przyspieszyć? Słyszałem, że hstore jest znacznie lepiej zaimplementowany w PostgreSQL 9, czy aktualizacja pomogłaby?