Eu tenho duas tabelas que são idênticas e mantêm as mesmas linhas de dados.
um usa um varchar(255) para cada coluna da tabela, o outro é digitado corretamente para cada coluna (usando data, int, decimal etc.).
Usando a janela de propriedades do Management Studio, posso ver que a tabela que armazena todos os dados como varchar é muito menor, o que não era o que eu esperava ver. Meu entendimento era que um int usaria apenas 4 bytes de espaço e, portanto, usaria muito menos espaço do que um int armazenado como um varchar.
O que devo procurar para entender o que está acontecendo aqui? Ambas as tabelas possuem uma chave primária em uma coluna int e nenhum outro índice. Para fins de teste, eles foram preenchidos com conjuntos de dados idênticos da mesma consulta de origem.
Portanto, isso se deve ao formato dos dados que estou armazenando, NESTE INSTÂNCIA, um varchar genuinamente ocupa menos espaço.
Muitas das colunas na tabela são ints e numeric(38,12) (isso é muito grande porque a fonte de dados usa esse tipo). No entanto, muitos dos valores nessas colunas são 0 ou inteiros inteiros. Como resultado, um varchar(255) armazenaria esse valor como 3 bytes (1 byte, mais 2 os dois overheads), enquanto um int usaria 4 e o numérico usaria 17. Isso resulta no uso dos tipos corretos para ter menos armazenamento eficiente em toda a mesa.
Para diminuir o espaço de armazenamento usado, eu precisaria verificar se posso mudar a digitação (de int para smallint ou numeric(32,12) para um numérico (19,8) etc.) alternativamente, parece que colunas esparsas seriam um boa solução onde há muitos 0s ou nulos esperados.