Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Implicações do espaço em disco ao definir o valor da coluna MySQL como NULL em vez de 0 ou ''


Não, usar NULL não ocupará menos espaço do que um VARCHAR vazio ou INT campo. Na verdade, pode levar mais espaço. Aqui está o porquê:

Um VARCHAR é armazenado como um tamanho + valor. O número de bytes usados ​​para o tamanho depende do armazenamento máximo do VARCHAR . VARCHAR(255) requer um byte, VARCHAR(65536) requer dois bytes e assim por diante.

Para que VARCHAR(255) coluna ocupa um byte mesmo se você armazenar uma string vazia. A tabela a seguir levaria no mínimo um byte por linha (mais alguma outra sobrecarga possível dependendo do mecanismo de armazenamento).
CREATE TABLE sample (
  a VARCHAR(255) NOT NULL
);

Para salvar NULL valores, o MySQL usa uma máscara de bits para cada linha. Até 8 colunas anuláveis ​​podem ser armazenadas por byte. Então, se você tiver uma tabela como esta:
CREATE TABLE sample (
  a VARCHAR(255) NULL
);

Levaria um mínimo de dois bytes por linha. Armazenando NULL apenas define o bit, já está reservado, quer você o use ou não. O byte para o VARCHAR O tamanho de 's ainda é usado para cada linha, mesmo se a coluna estiver definida como NULL .