¿Debería dividir MultiPolygons en Polygons?

8

En el sistema que estoy implementando, tengo una tabla T1 con una geometría asociada. La mayoría de las geometrías son un conjunto de n polígonos, con 10 <n <100. En este momento en la tabla T1 tengo una columna de geometría del tipo MultiPolygon, que tiene un índice GiST.

Como la tabla T1 va a ser grande, me temo que sería mejor crear una relación de uno a muchos con una segunda tabla T2, que tenga una columna de tipo Polígono, y dividir cada MultiPolygon en varios Polígonos.

Pero tengo que implementar búsquedas en la tabla T1, por lo tanto, con el segundo enfoque, el inconveniente es que tengo una combinación adicional para manejar. Además, sería más complicado insertar una geometría para un único registro de la tabla T1.

Me pregunto si alguien tiene alguna experiencia con ese problema y si esa persona podría arrojar algo de luz.

usuario3125
fuente

Respuestas:

1

Me inclinaría a decir que no se preocupe por el tamaño de su mesa T1; Los índices (y los desencadenantes, por supuesto) son los que afectan el rendimiento en su mayor parte.

Además de tener uniones menos, la traducción de WKB a la representación interna de PostGIS / GEOS que imagino sería un poco más óptima que hacerlo para varios polígonos individualmente.

La única necesidad de tener una tabla de geometría separada sería si un polígono estuviera asociado a más de un registro. Los multipolígonos deben considerarse una sola entidad a los efectos del diseño de la base de datos, y solo si la relación es más compleja, debe considerar una tabla separada. Y habría un ligero ahorro de espacio físico con menos mesas.

Pruébelo con ambas configuraciones y ejecute la consulta en pgadmin, que le proporciona los tiempos para cada parte de la consulta.

MerseyViking
fuente
44
@MerseyViking. El índice hará un trabajo mucho mejor si los multipolígonos se dividen en polígonos. En el caso del multipolígono, el índice se basa en la extensión total bbox del multipolígono. Los bboxes más pequeños en el índice son los más efectivos.
Nicklas Avén
@Nicklas está de acuerdo en que BBOX será más grande con múltiples polígonos. +1
Mapperz
OK gracias. Pero lo que no puedo entender es cuándo usar el tipo MultiPolygon si un índice siempre funciona mejor para Polygon.
user3125
2
La decisión de polígono frente a polígono múltiple es más compleja que eso. Hay más cosas a considerar. Los polígonos múltiples pueden proporcionar un diseño de base de datos "mejor". Dependiendo de cómo los polígonos y los polígonos múltiples estén relacionados espacialmente y qué procesamiento, análisis que desea hacer, la ganancia en la división de los polígonos múltiples puede ser grande o nada. Los polígonos múltiples también son un tipo de geometría común como resultado del procesamiento. Si, por ejemplo, usa ST_Difference en un polígono y un cruce, obtendrá un polígono múltiple.
Nicklas Avén
1
@ MerseyViking, entiendo su punto de vista, pero dado que tiene entre 10 y 100 polígonos en cada multipolígono, existe una gran posibilidad de que dividirlos en polígonos dará un gran impulso. Y una unión en campos enteros indexados no costará tanto.
Nicklas Avén