Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Alguma desvantagem para sinalizadores de bits nas colunas do banco de dados?


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.)