Eu vi essa pergunta Colunas Bit vs. Booleanas .
Estou me perguntando o mesmo para o Postgres: uma coluna inteira de um dígito ocupa o mesmo espaço em disco de uma booleana? Em tabelas grandes (~ 50 colunas x ~ 50 milhões de linhas), qual delas tem melhor desempenho? Como posso descobrir isso?
Você pode descobrir o tamanho do armazenamento com
No entanto, você precisa levar em consideração o alinhamento :
c
é “caractere” (1 byte), enquantoi
é “inteiro”.Se você definir uma tabela assim:
você obterá três bytes de “preenchimento” não utilizados entre as colunas, para que o inteiro possa ser armazenado em um endereço divisível por 4.
Portanto
boolean
, ocuparia 4 em vez de 1 bytes de armazenamento.Se você especificar as colunas ao contrário, o espaço ocupado pelos dados em cada linha seria de apenas 5 bytes.
A própria linha da tabela (a “tupla”) não consiste apenas nos dados brutos, mas há um “cabeçalho de tupla” de 23 bytes para cada linha (consulte a documentação ). Pode haver preenchimento após o cabeçalho para que os dados reais da tupla sejam alinhados em um múltiplo de
MAXALIGN
(normalmente 8).Portanto, se você deseja otimizar sua tabela para usar o mínimo de armazenamento possível, precisa levar em consideração a ordem das colunas na tabela.