Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Decimal VS Int no MySQL?


Pode depender da versão do MySQL que você está usando. Veja aqui .

Antes do MySQL 5.0.3, o tipo DECIMAL era armazenado como uma string e normalmente seria mais lento. No entanto, desde o MySQL 5.0.3 o tipo DECIMAL é armazenado em um formato binário, portanto, com o tamanho do seu DECIMAL acima, pode não haver muita diferença no desempenho.

O principal problema de desempenho teria sido a quantidade de espaço ocupado pelos diferentes tipos (com DECIMAL sendo mais lento). Com o MySQL 5.0.3+ isso parece ser um problema menor, porém se você estiver realizando cálculos numéricos nos valores como parte da consulta, pode haver alguma diferença de desempenho. Isso pode valer a pena testar, pois não há indicação na documentação que eu possa ver.

Editar: Com relação ao int(10) unsigned , eu tomei isso pelo valor de face como sendo apenas um int de 4 bytes. No entanto, isso tem um valor máximo de 4294967295 que estritamente não fornece o mesmo intervalo de números que um DECIMAL(10,0) unsigned .

Como @Unreason apontou, você precisaria usar um bigint para cobrir todo o intervalo de números de 10 dígitos, aumentando o tamanho para até 8 bytes.

Um erro comum é que, ao especificar tipos de colunas numéricas no MySQL, as pessoas geralmente pensam que o número entre colchetes tem um impacto no tamanho do número que elas podem armazenar. Não. O intervalo de numeração é puramente baseado no tipo de coluna e se ela é assinada ou não. O número entre colchetes é para fins de exibição nos resultados e não tem impacto nos valores armazenados na coluna. Também não terá impacto na exibição dos resultados, a menos que você especifique o ZEROFILL opção na coluna também.