Tengo dos tablas que me gustaría intersecar. La primera tabla representa aproximadamente 50 millones de puntos y la segunda es una capa poligonal de todos los países del mundo. Quiero obtener todos los puntos que se cruzan con ese polígono.Postgresql Spatial Query demasiado lento
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);
Esta consulta es muy simple pero lleva más de 4 horas en ejecutarse. Tengo índices GIST construidos en la columna de geometría para cada tabla y tengo ANÁLISIS DE VACÍO sobre ambos. Todavía no hay aumento de rendimiento. Estoy ejecutando CENTOS 6 con Postgres 8.4 y PostGIS 1.5. ¿Alguien puede arrojar algo de luz sobre cómo acelerar las cosas? Obtengo resultados muy rápidamente al LIMITAR la consulta a 1000 a 10000 registros. Cuando trato de agarrar el conjunto de resultados completo, se arrastra. ¿Pensamientos?
ACTUALIZACIÓN: Veo ahora que tengo que refinar mi consulta como un primer paso en este proceso. Obtengo el sobre como este
select astext(st_envelope(wkb_geometry)) as e
from world_borders
where cntry_name = 'UK'
Ahora, ¿cuál es la forma más eficiente de incluir/ejecutar esto como parte de toda la consulta?
Cada uno de los lanzamientos recientes ha mejorado los índices GiST y GIN. Es posible que desee considerar una actualización a una nueva versión principal. Incluso podría valer la pena probar tu problema en la versión 9.2 beta, ya que incluye SP-GiST. http://www.postgresql.org/docs/9.2/static/spgist-intro.html – kgrittn