Tengo una mesa grande con, digamos, 10 columnas. 4 de ellos permanece nulo la mayoría de las veces. Tengo una consulta que tiene un valor nulo y toma cualquier tamaño o ningún tamaño en bytes. Leí 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 NULO ocupa espacio - 2 bytes
SQL: uso de valores NULL frente a valores predeterminados
Un
NULL
valor en las bases de datos es un valor del sistema que ocupa un byte de almacenamiento e indica que un valor no está presente a diferencia de un espacio o cero o cualquier otro valor predeterminado.
¿Puede orientarme sobre el tamaño tomado por valor nulo?
fuente
byte
(normalmente de 8 bits). Entonces, en realidad, abit
toma abyte
. Gran respuesta Mark: +1.El siguiente enlace afirma que si la columna es de longitud variable, es decir,
varchar
entoncesNULL
toma 0 bytes (más 1 byte se usa para marcar si el valor esNULL
o no):El enlace anterior, así como el enlace siguiente, afirman que para columnas de longitud fija, es decir,
char(10)
oint
, un valor deNULL
ocupa la longitud de la columna (más 1 byte para marcar si esNULL
o no):Ejemplos:
char(10)
aNULL
, ocupa 10 bytes (puesto a cero)int
toma 4 bytes (también puestos a cero).varchar(1 million)
conjunto enNULL
toma 0 bytes (+ 2 bytes)Nota: en una ligera tangente, el tamaño de almacenamiento de
varchar
es la longitud de los datos ingresados + 2 bytes.fuente
Desde este enlace :
fuente
El almacenamiento de un valor NULO no ocupa ningún espacio.
Este es un concepto erróneo: son 2 bytes por fila , y estoy bastante seguro de que todas las filas usan esos 2 bytes independientemente de si hay columnas que aceptan valores NULL.
Se trata de bases de datos en general, no específicamente de SQL Server. SQL Server no usa 1 byte para almacenar valores NULL.
fuente