Estou tentando executar uma operação 'dissolver' no PostGIS usando o comando ST_Union.
A camada de entrada é reconhecidamente bastante grande e complexa. Por "grande", quero dizer 57.771 recursos, com número de vértices variando de 4 a 758.018 por recurso, com média de cerca de 86 vértices por recurso. Apenas cerca de 10 dos recursos têm> 10.000 vértices. Por "complexo", quero dizer que os polígonos têm muitos buracos, sobreposições confusas, ilhas etc. e que os polígonos grandes tendem a ter uma caixa delimitadora que cobre muitos dos polígonos menores, talvez tornando os índices menos úteis.
O problema é que a consulta é extremamente lenta a ponto de ser inutilizável. Li aqui o post de Paul em 2009 que me levou a acreditar que minha consulta ainda deveria ser bastante rápida. Estou usando o seguinte comando; estou fazendo algo flagrantemente errado ou ineficiente?
SELECT ST_Union(f.geom) as geom, column1,column2,column3
FROM "inputlayer" As f
GROUP BY column1,column2,column3
Edit: Estou usando:
POSTGIS="2.1.4 r12966" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" GDAL="GDAL 2.0.0dev, released 2014/04/16" LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
A máquina na qual estou executando o servidor db é uma máquina virtual sem muita energia. Vou tentar a idéia SET work_mem = 50000 e ver como as coisas vão!