Configuración NOT NULL
no tiene ningún efecto per se en el rendimiento. Unos pocos ciclos para el cheque - irrelevante.
Pero puede mejorar el rendimiento utilizando valores NULL en lugar de valores ficticios. Dependiendo de los tipos de datos, puede ahorrar mucho espacio en disco y RAM , acelerando así... todo.
El mapa de bits nulo solo se asigna si hay valores NULL en la fila . Es un bit para cada columna en la fila (NULL o no). Para tablas de hasta 8 columnas, el mapa de bits nulo es completamente gratuito y utiliza un byte de repuesto entre el encabezado de la tupla y los datos de la fila. Después de eso, el espacio se asigna en múltiplos de MAXALIGN
(típicamente 8 bytes, cubriendo 64 columnas). La diferencia se pierde con el relleno. Por lo tanto, paga el precio total (¡bajo!) por el primer valor NULO de cada fila . Los valores NULL adicionales solo pueden ahorrar espacio.
El requisito de almacenamiento mínimo para cualquier valor no nulo es de 1 byte (boolean
, "char"
, ...) o normalmente mucho más, más (posiblemente) relleno para alineación. Lea sobre tipos de datos
o verifique los detalles sangrientos en la tabla del sistema pg_type
.
Más información sobre el almacenamiento nulo: