No MySQL, é melhor sempre permitir nulos, a menos que você saiba que um campo é obrigatório, ou sempre usar Not Null
, a menos que saiba que um campo conterá nulos? Ou não importa?
Eu sei que em alguns DBMSs eles dizem para usar Not Null
o máximo possível porque permitir nulos requer um bit extra (ou byte?) Por registro para armazenar o status Nulo.
Na maioria dos bancos de dados, uma
NOT NULL
coluna será mais eficiente em termos de dados armazenados pelo motivo que você declara e também mais eficiente para consultar e indexar - portanto, a menos que você queira permitir NULLs em uma coluna, você deve desativá-los explicitamente.Haverá uma pequena implicação no desempenho, já que as
NOT NULL
restrições extras provavelmente precisarão ser verificadas para cada linha que você afetar com qualquer INSERT ou UPDATE, mas como a maioria dos bancos de dados é relativamente leve para gravação e pesada para leitura, isso provavelmente não é uma preocupação (o pequeno é improvável que o tempo extra gasto seja perceptível de qualquer maneira, pois é uma operação vinculada à CPU em que o restante da operação de inserção/atualização será vinculada a IO e, portanto, um gargalo muito mais significativo) e oferece a você alguns "livres " verificação de dados para que seu código (ou o código de outras pessoas) não possa acidentalmente colocar NULLs onde outro código não os espera e, portanto, pode fornecer resultados incorretos na presença deles.Edit: Como Peter aponta em seu comentário, o acima é um generalismo e pode não ser verdadeiro para todos os DMBSs, embora eu tenha certeza de que é para mysql e mssql. Outras complicações na área podem incluir recursos como tabelas esparsas (como implementadas no MSSQL 2008, por exemplo) que alterarão a dinâmica de desempenho de colunas (não) anuláveis.
Você deve deixar que o design do esquema e os requisitos do aplicativo orientem essa decisão. As diferenças de desempenho provavelmente não são perceptíveis na maioria dos casos.