Pavel está certo, eu só gostaria de explicar um pouco.
Presumindo que você quer dizer um impacto no desempenho em comparação com o ponto flutuante ou inteiro com deslocamento de ponto fixo (ou seja, armazenar milésimos de centavo como um inteiro):Sim, há muito impacto no desempenho. PostgreSQL, e pelo que parece MySQL, armazena
DECIMAL
/ NUMERIC
em decimal codificado em binário. Este formato é mais compacto do que armazenar os dígitos como texto, mas ainda não é muito eficiente para trabalhar. Se você não estiver fazendo muitos cálculos no banco de dados, o impacto será limitado ao maior espaço de armazenamento necessário para BCD em comparação com inteiro ou ponto flutuante e, portanto, as linhas mais largas e varreduras mais lentas, índices maiores, etc. Operações de comparação em b -Tree pesquisas de índice também são mais lentas, mas não o suficiente para importar, a menos que você já esteja vinculado à CPU por algum outro motivo.
Se você estiver fazendo muitos cálculos com o
DECIMAL
/ NUMERIC
valores no banco de dados, então o desempenho pode realmente sofrer. Isso é particularmente perceptível, pelo menos no PostgreSQL, porque o Pg não pode usar mais de uma CPU para qualquer consulta. Se você está fazendo um monte de divisão e multiplicação, matemática mais complexa, agregação, etc em números, você pode começar a ficar limitado pela CPU em situações em que nunca estaria ao usar um tipo de dados flutuante ou inteiro. Isso é particularmente perceptível em cargas de trabalho do tipo OLAP (analítica) e em relatórios ou transformação de dados durante o carregamento ou extração (ETL). Apesar do fato de que existe um impacto no desempenho (que varia de acordo com a carga de trabalho de insignificante a muito grande), você geralmente deve usar
numeric
/ decimal
quando é o tipo mais apropriado para sua tarefa - ou seja, quando valores de intervalo muito altos devem ser armazenados e/ou erro de arredondamento não é aceitável. Ocasionalmente, vale a pena o incômodo de usar um deslocamento de ponto fixo e bigint, mas isso é desajeitado e inflexível. Usar ponto flutuante raramente é a resposta certa devido a todos os desafios de trabalhar de forma confiável com valores de ponto flutuante para coisas como moeda.
(A propósito, estou bastante animado que alguns novos CPUs Intel e a linha de CPUs Power 7 da IBM incluem suporte de hardware para ponto flutuante decimal IEEE 754. Se isso estiver disponível em CPUs de baixo custo, será uma grande vitória para bancos de dados .)