PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Quanto espaço em disco é necessário para armazenar um valor NULL usando o banco de dados postgresql?


Laramie está certo sobre o bitmap e ele liga para o lugar certo no manual. No entanto, isso é quase, mas não totalmente correto:

Portanto, para qualquer linha com um ou mais nulos, o tamanho adicionado a ela seria o do bitmap (N bits para uma tabela de N colunas, arredondado para cima).

É preciso levar em consideração o alinhamento de dados. O HeapTupleHeader (por linha) tem 23 bytes de comprimento, os dados reais da coluna sempre começam em um múltiplo de MAXALIGN (normalmente 8 bytes). Isso deixa um byte de preenchimento que pode ser utilizado pelo bitmap nulo. Na verdade, o armazenamento NULL é totalmente gratuito para tabelas de até 8 colunas .

Depois disso, outro MAXALIGN (normalmente 8) bytes são alocados para o próximo MAXALIGN * 8 (normalmente 64) colunas. Etc. Sempre para o número total de colunas do usuário (tudo ou nada ). Mas somente se houver pelo menos um valor NULL real na linha.

Fiz testes extensivos para verificar tudo isso. Mais detalhes:
  • Não usar NULL no PostgreSQL ainda usa um bitmap NULL no cabeçalho?