It may seem hard to believe, but I have seen DECIMAL(31,0) in
action on a production server. Not just in one column, but in 15
columns just in the largest 4 tables of one schema. The column
was being used to represent a integer primary or foreign key
column.
In a representative production instance (one of a dozen plus
distributed production database servers) the overall database
footprint was decreased from ~10 GB to ~2 GB, a 78% saving. In
total, 15 columns across just 4 tables were changed from
DECIMAL(31,0) to INT UNSIGNED.
One single table > 5GB was reduced to under 1GB (a 81%
saving). This being my record for any GB+ tables in my time
working with the MySQL database.
Had this server for example had 4GB of RAM, and say 2.5GB
allocated to the innodb_buffer_pool_size, this one change moved
the system from requiring more consistent disk access (4x data to
memory) to being able to store all data in memory. Tests showed …
[Read more]