Eu tenho um aplicativo que usa uma tabela PostgreSQL. A tabela é muito grande (bilhões de linhas) e possui uma coluna que é um número inteiro.
O integer
pode ter até 6 dígitos, ou seja, 0-999.999 , sem negativos.
Pensei em mudar para ser numeric(6,0)
.
Isso seria uma boa ideia? Levaria numeric(6,0)
menos bytes? E quanto ao desempenho (esta tabela está sendo muito consultada)?
Não.
Não.
Mais devagar. É armazenado como decimal codificado em binário porque é um valor de precisão arbitrária.
A resposta definitiva é não para todas as suas perguntas. Integer é sempre o caminho a percorrer para qualquer coisa que você possa usá-lo. (dinheiro, por exemplo)
Pense sobre isso por um minuto. Quando o mecanismo de banco de dados encontra um número inteiro, ele o manipula com muita eficiência porque não há muita interpretação para ele. É um número inteiro. O tipo numérico se comporta mais como uma string. O mecanismo primeiro precisa descobrir quais partes estão antes e depois do ponto decimal e massageá-las adequadamente para realizar operações numéricas.
Usar um número inteiro sempre será mais eficiente do que um numérico, embora os tipos numéricos geralmente sejam mais convenientes para humanos.