valores not ejemplos ejemplo check buscar sql-server tsql sql-server-2005 null

sql-server - not - is null oracle



Cuánto valor "nulo" de valor tiene en SQL Server (4)

Tengo una gran mesa con decir 10 columnas. 4 de ellos permanecen nulos la mayoría de las veces. Tengo una consulta que hace que el valor nulo tome cualquier tamaño o ningún tamaño en bytes. Leo algunos artículos que algunos de ellos dicen:

http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html

Existe la idea errónea de que si tenemos los valores NULL en una tabla, no ocupa espacio de almacenamiento. El hecho es que un valor NULL ocupa espacio: 2 bytes

SQL: usar valores NULL vs. valores predeterminados

Un valor NULL en las bases de datos es un valor del sistema que ocupa un byte de almacenamiento e indica que un valor no está presente en lugar de un espacio o cero o cualquier otro valor predeterminado.

¿Puede por favor guiarme con respecto al tamaño tomado por valor nulo?


Almacenar un valor NULL no ocupa espacio.

"El hecho es que un valor NULL ocupa espacio: 2 bytes".

Esta es una idea errónea, eso es 2 bytes por fila , y estoy bastante seguro de que todas las filas usan esos 2 bytes, independientemente de si hay alguna columna que acepte nulos.

Un valor NULL en las bases de datos es un valor del sistema que ocupa un byte de almacenamiento

Esto está hablando de bases de datos en general, no específicamente SQL Server. SQL Server no usa 1 byte para almacenar valores NULL.


El siguiente enlace afirma que si la columna es de longitud variable, es decir, varchar , NULL toma 0 bytes (más 1 byte se utiliza para marcar si el valor es NULL o no):

El enlace anterior, así como el siguiente enlace, afirman que para las columnas de longitud fija, es decir, char(10) o int , un valor de NULL ocupa la longitud de la columna (más 1 byte para marcar si es NULL o no):

Ejemplos:

  1. Si configura un char(10) en NULL , ocupa 10 bytes (cero)
  2. Un int toma 4 bytes (también se ha reducido a cero).
  3. Un varchar(1 million) establecido en NULL toma 0 bytes (+ 2 bytes)

Nota: con una ligera tangente, el tamaño de almacenamiento de varchar es la longitud de los datos ingresados ​​+ 2 bytes.


Si el campo es de ancho fijo, el almacenamiento de NULL toma el mismo espacio que cualquier otro valor: el ancho del campo.

Si el campo es de ancho variable, el valor NULO no ocupa espacio.

Además del espacio requerido para almacenar un valor nulo, también hay una sobrecarga por tener una columna que admite nulos. Para cada fila se usa un bit por columna que admite nulos para marcar si el valor de esa columna es nulo o no. Esto es cierto ya sea que la columna sea fija o de longitud variable.

El motivo de las discrepancias que ha observado en la información de otras fuentes:

  • El comienzo del primer artículo es un poco engañoso. El artículo no está hablando del costo de almacenar un valor NULL, sino el costo de tener la capacidad de almacenar un NULL (es decir, el costo de hacer que una columna sea nulable). Es cierto que cuesta algo en el espacio de almacenamiento hacer que una columna sea nulable, pero una vez que lo haya hecho, se necesita menos espacio para almacenar un valor NULL que para almacenar un valor (para columnas de ancho variable).

  • El segundo enlace parece ser una pregunta sobre Microsoft Access. No conozco los detalles de cómo Access almacena NULL, pero no me sorprendería si es diferente de SQL Server.


De este enlace :

Cada fila tiene un mapa de bits nulo para las columnas que permiten valores nulos. Si la fila en esa columna es nula, entonces un bit en el mapa de bits es 1 sino que es 0.

Para tipos de datos de tamaño variable, el tamaño de acctual es 0 bytes.

Para el tipo de datos de tamaño fijo, el tamaño acctual es el tamaño de tipo de datos predeterminado en bytes establecido en el valor predeterminado (0 para los números, '''' para los caracteres).