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

¿Cuánto espacio en disco se necesita para almacenar un valor NULL usando postgresql DB?

Laramie tiene razón sobre el mapa de bits y enlaza con el lugar correcto en el manual. Sin embargo, esto es casi, pero no del todo correcto:

Entonces, para cualquier fila dada con uno o más valores nulos, el tamaño agregado sería el del mapa de bits (N bits para una tabla de N columnas, redondeado hacia arriba).

Uno tiene que tener en cuenta la alineación de datos. El HeapTupleHeader (por fila) tiene una longitud de 23 bytes, los datos reales de la columna siempre comienzan en un múltiplo de MAXALIGN (típicamente 8 bytes). Eso deja un byte de relleno que puede ser utilizado por el mapa de bits nulo. En efecto, el almacenamiento NULL es totalmente gratuito para tablas de hasta 8 columnas .

Después de eso, otro MAXALIGN (normalmente 8) bytes se asignan para el siguiente MAXALIGN * 8 (típicamente 64) columnas. Etc. Siempre por el número total de columnas de usuario (todo o nada ). Pero solo si hay al menos un valor NULL real en la fila.

Realicé pruebas exhaustivas para verificar todo eso. Más detalles:

  • ¿No usar NULL en PostgreSQL todavía usa un mapa de bits NULL en el encabezado?