Eu tenho muitos atributos booleanos para entidades em uma tabela e preciso armazenar ainda mais deles. Atualmente tenho 17 desses atributos (Outros campos são quatro bigint
campos). Estou precisando adicionar cerca de uma dúzia ou mais de atributos.
Devo seguir em frente e criar colunas booleanas para cada um dos atributos necessários ou existem maneiras melhores? Como isso afetaria o armazenamento?
Esses campos serão pesquisados em várias combinações (portanto, os índices de várias colunas não ajudarão).
Pensei (prematuro) em economizar armazenamento : Que tal eu usar um inteiro de 64 bits e usar cada bit como um valor booleano? Posso usar os operadores de bits para correspondência, mas essa operação usará índices, pois a varredura não é baseada na ordenação ou na igualdade de inteiros?
Eu não me incomodaria.
bigint
ocupa 8 bytes de armazenamento, contra 17 para os booleanos.bigint
campos ocupam mais 32 bytes de armazenamento.Portanto, espere economizar apenas cerca de 10% - menos se você tiver mais colunas não booleanas, mas apenas um pouco mais à medida que adicionar mais colunas booleanas - à custa de tornar seu código e dados muito mais difíceis de entender.
Mas se você tiver muitos dados (centenas de milhões de registros) eu faria alguns testes de desempenho para comparar.