Más

Consultar de manera eficiente una tabla PostGIS particionada por región

Consultar de manera eficiente una tabla PostGIS particionada por región


Tengo dos tablas PostGIS: una decallesy uno deregiones, que, además de abarcar la misma extensión espacial, a priori no guardan relación. ElcallesLas consultas que realizo se pueden restringir a una región determinada, proporcionando una identificación conocida. Para explotar esto, agregué unregion_idcolumna a lacallesmesa (usando unst_intersects-basada en la consulta de actualización, que era bastante cara, pero se realizaba solo una vez).

Mi pregunta: una vez que esto esté en su lugar, ¿el uso de un índice en elcalles.region_idcolumna sea suficiente para que las consultas de este tipo sean lo más eficientes posible:

seleccione * de las calles donde region_id =  y…

¿O hay un mecanismo alternativo que funcionaría mejor?


Indexar una columna que se usa en combinaciones o cláusulas donde es la mejor (y más simple) forma de hacer que una consulta sea eficiente, por lo que la respuesta es sí.

Otro truco que puedes hacer es GRUPO la tabla contra el índice (recuerde ejecutar ANÁLISIS DE VACÍO después de eso para actualizar las estadísticas de la tabla). CLUSTER hace una copia de la tabla (la tabla no se podrá utilizar durante la agrupación en clúster) reordenando los datos para que los valores idénticos del índice se almacenen de forma contigua en el disco (maximizando así la eficiencia de lectura anticipada del disco).

Asegúrese de leer la documentación sobre el comando CLUSTER para comprender si lo necesita y cómo funciona.

Sin embargo, tenga en cuenta que Postgres no usará el índice cuando la condición sea NULL.