Eu tenho uma grande mesa com, digamos, 10 colunas. 4 deles permanecem nulos na maioria das vezes. Eu tenho uma consulta que faz o valor nulo leva qualquer tamanho ou nenhum tamanho em bytes. Li alguns artigos que alguns deles estão dizendo:
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
Existe um equívoco de que, se tivermos os valores NULL em uma tabela, ela não ocupará espaço de armazenamento. O fato é que um valor NULL ocupa espaço - 2 bytes
SQL: usando valores NULL vs. valores padrão
Um
NULL
valor em bancos de dados é um valor do sistema que ocupa um byte de armazenamento e indica que um valor não está presente em oposição a um espaço ou zero ou qualquer outro valor padrão.
Você pode me orientar quanto ao tamanho assumido pelo valor nulo.
fonte
byte
(normalmente 8 bits). Então, na realidade, abit
leva abyte
. Ótima resposta, Mark: +1.O link a seguir afirma que se a coluna tem comprimento variável, ou seja
varchar
,NULL
leva 0 bytes (mais 1 byte é usado para sinalizar se o valor éNULL
ou não):O link acima, bem como o link abaixo, afirmam que para colunas de comprimento fixo,
char(10)
ou sejaint
, um valor deNULL
ocupa o comprimento da coluna (mais 1 byte para sinalizar se éNULL
ou não):Exemplos:
char(10)
paraNULL
, ele ocupará 10 bytes (zerado)int
leva 4 bytes (também zerados).varchar(1 million)
conjunto paraNULL
leva 0 bytes (+ 2 bytes)Nota: em uma ligeira tangente, o tamanho do armazenamento de
varchar
é o comprimento dos dados inseridos + 2 bytes.fonte
Deste link :
fonte
Armazenar um valor NULL não ocupa nenhum espaço.
Isso é um equívoco - são 2 bytes por linha , e tenho certeza de que todas as linhas usam esses 2 bytes, independentemente de haver colunas anuláveis.
Isso se refere a bancos de dados em geral, não especificamente ao SQL Server. O SQL Server não usa 1 byte para armazenar valores NULL.
fonte