sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Postgres reescribe toda la fila en la actualización?

Seleccionando c) de sus preguntas:

Como @Craig ya explicó , las columnas que son "compatibles con TOAST" y mayores que un cierto umbral se almacenan fuera de línea en una tabla TOAST dedicada por tabla ("bifurcaciones de relación" separadas, archivos separados en el disco). Entonces, un bytea de 5 MB la columna permanecería mayormente intacta en una actualización si la columna en sí no se cambia. El manual:

Énfasis en negrita mío.
La fila en la bifurcación de relación principal todavía se copia y una fila muerta permanece cuando se actualiza (independientemente de si los valores realmente cambiaron o no). Para tamaños de fila grandes, la siguiente solución podría resultar rentable:

Cree una pequeña tabla separada 1:1 para banderas cambiadas frecuentemente. Solo la clave principal (=clave externa al mismo tiempo) y las banderas cambiadas con frecuencia. Esto haría que las actualizaciones fueran mucho más rápidas y preservaría el espacio en disco, por una sobrecarga adicional inicial y algún costo para las consultas que necesitan unirse a ambas tablas (otras consultas en realidad se vuelven más rápidas). Más información sobre los requisitos de espacio en disco de las filas de la tabla: