Potrebbe dipendere dalla versione di MySQL che stai utilizzando. Vedi qui .
Prima di MySQL 5.0.3, il tipo DECIMAL era memorizzato come una stringa e in genere sarebbe stato più lento. Tuttavia, poiché MySQL 5.0.3 il tipo DECIMAL è archiviato in un formato binario, quindi con la dimensione del tuo DECIMAL sopra, potrebbe non esserci molta differenza nelle prestazioni.
Il principale problema di prestazioni sarebbe stato la quantità di spazio occupato dai diversi tipi (con DECIMAL più lento). Con MySQL 5.0.3+ questo sembra essere un problema minore, tuttavia se eseguirai calcoli numerici sui valori come parte della query, potrebbero esserci delle differenze di prestazioni. Potrebbe valere la pena testarlo poiché non ci sono indicazioni nella documentazione che posso vedere.
Modifica: Per quanto riguarda int(10) unsigned
, l'ho preso al valore nominale come se fosse solo un int di 4 byte. Tuttavia questo ha un valore massimo di 4294967295 che rigorosamente non fornisce lo stesso intervallo di numeri di un DECIMAL(10,0) unsigned
.
Come ha sottolineato @Unreason, dovresti usare un bigint
per coprire l'intera gamma di numeri a 10 cifre, spingendo la dimensione fino a 8 byte.
Un errore comune è che quando si specificano i tipi di colonne numeriche in MySQL, le persone spesso pensano che il numero tra parentesi abbia un impatto sulla dimensione del numero che possono memorizzare. Non è così. L'intervallo di numeri si basa esclusivamente sul tipo di colonna e se è firmata o meno. Il numero tra parentesi è a scopo di visualizzazione nei risultati e non ha alcun impatto sui valori memorizzati nella colonna. Inoltre, non avrà alcun impatto sulla visualizzazione dei risultati a meno che non specifichi il ZEROFILL
opzione anche sulla colonna.