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

¿Configurar NOT NULL en una columna en postgresql aumenta el rendimiento?

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: