none
Data Type NULL ou NOT NULL? RRS feed

  • Pergunta

  • Galera, no meu banco de dados, quando eu devo usar NULL ou NOT NULL ?

    Quero dizer, sempre que possível eu devo deixar como null para ocupar menos espaço no banco de dados?

    Trabalhei em uma empresa onde o líder do projeto criava os campos como not null e deixava default empty, ele dizia que era para evitar tratamentos na aplicação, exemplo: if(object == null)..

    Em um cenário com milhões de cadastros, e mais todas as outras colunas seguindo o mesmo exemplo, eu não estaria ocupando mais espaço do que o necessário? 
    • Editado Rodrigo Epic domingo, 29 de maio de 2016 15:38 melhoria
    domingo, 29 de maio de 2016 15:36

Respostas

Todas as Respostas

  • Fala rodrigo, dá uma lida nesse  artigo. Acho que vai te ajudar.

    http://www.fabriciolima.net/blog/2012/02/29/colunas-com-valores-null-ocupam-espaco-em-disco-mito/

    Att, wsti.

    domingo, 29 de maio de 2016 15:54
  • Deleted
    • Marcado como Resposta Thales F Quintas segunda-feira, 30 de maio de 2016 16:50
    domingo, 29 de maio de 2016 16:23
  • Eu li o artigo. Muito obrigado pela atenção =)
    segunda-feira, 30 de maio de 2016 08:28
  • Muito obrigado pela explicação =)
    segunda-feira, 30 de maio de 2016 08:29
  • Apenas reforçando...

    Em linhas no formato convencional, os datatypes de tamanho fixo sempre armazenam informações, independente se são nulos ou não.

    Isto é necessário para que não haja perda de performance, pois o SQL Server armazena as colunas de tamanho fixo (datatypes) antes das colunas de tamanho variável e necessita manter um tamanho fixo (marcado no campo pminlen dos cabeçalhos das páginas de dados) em bytes para cada linha da tabela.

    Por exemplo: se eu inserir três registros conforme abaixo em uma tabela com uma coluna int e outra char(5) em único batch...

    INSERT INTO TABELA VALUES (100, 'teste')

    INSERT INTO TABELA VALUES (null, 'teste')

    INSERT INTO TABELA VALUES (200, 'teste')

    Será armazenado...

    100, teste

    100, teste (primeiro campo (o int) setado como nulo na NULL Bitmap)

    200, teste

    Repare que o SQL utilizou o valor 100 da primeira linha para armazenar na segunda linha, pois aproveitou a mesma variável de memória. 

    segunda-feira, 30 de maio de 2016 23:59