У меня есть две таблицы, которые я бы хотел пересечь. Первая таблица составляет около 50 миллионов точек, а вторая - многоугольный слой всех стран мира. Я хочу получить все точки, которые пересекаются с этим многоугольником.Postgresql Пространственный запрос слишком медленный
SELECT d.id, d.geom
FROM export d, world_boundaries b
WHERE (b.cntry_name = 'UK')
AND d.date_inserted >= '2012-06-01'
AND d.geom && b.wkb_geometry
AND intersects(d.geom, b.wkb_geometry);
Этот запрос очень прост, но требуется более 4 часов. У меня есть индексы GIST, построенные на столбце геометрии для каждой таблицы, и у них есть VACUUM ANALYZE's. Все еще нет увеличения производительности. Я запускаю CENTOS 6 с Postgres 8.4 и PostGIS 1.5. Может ли кто-нибудь пролить свет на то, как ускорить процесс? Я получаю результаты очень быстро, ОГРАНИЧИВАЯ запрос до 1000 до 10000 записей. Когда я пытаюсь схватить полный набор результатов, он тащит. Мысли?
UPDATE: Теперь я вижу, что мне нужно уточнить свой запрос в качестве первого шага в этом процессе. Я получаю такой конверт
select astext(st_envelope(wkb_geometry)) as e
from world_borders
where cntry_name = 'UK'
Теперь, что является самым эффективным способом включить/выполнить это как часть всего запроса?
Каждый из последних выпусков улучшил индексы GiST и GIN. Возможно, вы захотите рассмотреть обновление до новой крупной версии. Возможно, даже стоит попробовать вашу проблему на бета-версии 9.2, поскольку она включает SP-GiST. http://www.postgresql.org/docs/9.2/static/spgist-intro.html – kgrittn