¿Cómo PostgreSQL ordena físicamente nuevos registros en el disco (después de un clúster en la clave primaria)?

9

Necesita saber cómo PostgreSQL ordena los registros en el disco. En este caso, me gustaría aprovechar la combinación de índices como se indica en los documentos , que, según tengo entendido, utiliza mapas de bits para obtener filas coincidentes y las devuelve según su ubicación física. La tabla en cuestión ha sido agrupada por su clave primaria.

Según tengo entendido, PostgreSQL no continúa automáticamente haciendo clustering después de que un clustering haya finalizado (aunque sí recuerda que se ha agrupado según un cierto índice). Ahora, dado que esta es la clave principal, me pregunto si el orden de almacenamiento físico estaría de acuerdo con eso (lo que, de ser cierto, me gustaría utilizar a nuestro favor para una consulta específica).

En resumen, ¿cómo ordena PostgreSQL sus nuevos registros, especialmente después de la agrupación?

¡Muchas gracias!

Juan Carlos Coto
fuente

Respuestas:

9

Las filas en postgresql no tienen un orden fijo. No solo se colocan registros donde haya espacio libre, sino que también se pueden mover registros. Esto se debe a que cuando se actualiza una fila, se crea una nueva versión de la fila en una nueva ubicación, mientras que la versión anterior continúa viviendo en su ubicación anterior hasta que se elimina por vacío.

Las operaciones A CLUSTER clasifican todas las filas, pero de hecho no afectan la forma en que postgresql agrega las filas. Entonces los datos no permanecerán ordenados. Sin embargo, postgresql mantiene estadísticas entre las cuales se encuentra la correlación para cada columna entre el orden de las filas en las tablas y el orden ordenado de esa columna. Por lo tanto, el planificador aún puede optimizar su plan en función de las estadísticas que le indican que la tabla todavía está ordenada en su mayoría, incluso si se han agregado algunas filas después de una operación de clúster (o se han movido por actualizaciones).

Eelke
fuente