Se você tiver apenas algumas funções, nem mesmo salvará nenhum armazenamento espaço no PostgreSQL . Um
integer
coluna usa 4 bytes, um bigint
8 bytes. Ambos podem exigir preenchimento de alinhamento:- Compreendendo os tamanhos de linha do Postgres
- Calculando e economizando espaço no PostgreSQL
Um
boolean
coluna usa 1 byte. Efetivamente, você pode ajustar quatro ou mais colunas booleanas para um integer
coluna, oito ou mais para um bigint
. Também leve em consideração que
NULL
valores usam apenas um bit (simplificado) no bitmap NULL. Colunas individuais são mais fáceis de ler e indexar . Outros já comentaram sobre isso.
Você ainda pode utilizar índices em expressões ou índices parciais para contornar problemas com índices ("não sargáveis"). Declarações generalizadas como:
banco de dados não pode usar índices em uma consulta como esta
ou
Estas condições não são SARGable!
são não inteiramente verdadeiras - talvez para alguns outros RDBMS sem esses recursos.
Mas por que contornar quando você pode evitar o problema completamente?
Como você esclareceu, estamos falando de 6 tipos distintos (talvez mais). Vá com
boolean
individual colunas. Você provavelmente economizará espaço em comparação com um bigint
. A necessidade de espaço parece irrelevante neste caso. Se esses sinalizadores eram mutuamente exclusivos , você pode usar um coluna do tipo
enum
ou uma pequena tabela de consulta e uma chave estrangeira referenciando-a. (Descartado na atualização da questão.)