2010-12-28 23 views
13

Duplicar posibles:
Space used by nulls in database¿Los valores nulos ahorran espacio de almacenamiento?

Lo que es más eficiente en términos de espacio de almacenamiento?

  • A nullable int columna llena de nulos.
  • Una columna int llena de ceros.

Sé que una columna anulable ocupa 1 bit adicional de información para almacenar su estado nulo, pero ¿los valores nulos guardan la base de datos de la asignación de 32 bits para un int que es nulo?

(semántica nulos y el significado de null no son importantes para esta pregunta)

+0

Estoy trabajando con 2008 R2, pero si otras versiones se comportan de manera diferente, sería bueno saberlo. –

+0

D'oh, busqué "almacenamiento nulo", pero no "espacio nulo". Acordado por duplicado, las respuestas allí responden a esta pregunta. –

Respuesta

14

Para los campos de ancho fijo como anulable int el espacio de almacenamiento requerido es siempre el mismo, independientemente de si el valor es nulo o no.

Para campos anulables de ancho variable, el valor 'NULL' toma cero bytes de espacio de almacenamiento (ignorando el bit para almacenar si el valor es nulo o no).

+0

¿Hay alguna referencia para esto o lo conoce por evidencia experimental? –

+7

Lo sé porque esto se hace casi todas las semanas. ;-) –

+0

Probablemente no entiendo * cuando * el espacio para una columna (o, en realidad, una fila) está reservado por SQL Server, pero el hecho es que agregar una columna que admite nulos a una gran base de datos es instantáneo y no lo es Parece que no implica ninguna asignación (lo que sucede si especifica NOT NULL con un valor predeterminado, por ejemplo). ¿Significa esto que SQL Server asignará un montón de espacio para esta nueva columna cuando intente por primera vez escribir una fila que contenga ese valor? – Groo

4

Si está utilizando SQL Server 2008 y espera tener un número significativo de valores NULL en las columnas, le sugiero que investigate Sparse Columns. Están optimizados para almacenar valores NULL.

3

SQL Server 2008 introdujo Sparse columns para columnas que son principalmente NULL.

Una columna SPARSE para una fila, que es NULL utiliza 0 bits de almacenamiento. Pero pagas una penalización de 4 bytes si hay un valor.

3

0 no es nulo. Si no tiene un valor para el campo, ¡no ponga un cero allí! No puedo decirte cuántas veces he encontrado errores que no se pueden corregir porque no tenemos forma de saber si los ceros en una base de datos de producción fueron ceros reales o nulos falsos. Abrazar nulos: sí, requieren un poco más de codificación, pero abrácenlos de todos modos.

+1

En este caso, el campo es solo un indicador de aplicación, y la comprobación de cero o de nulo es el mismo, por lo tanto, solo la consideración de almacenamiento. –

Cuestiones relacionadas