Le typage adéquat des champs de la base de données est la deuxième étape incontournable de la conception optimisée d'une base de données. Contrairement à ce qui semble être une croyance répandue parmi de nombreux développeurs, MySQL est livré avec de nombreux autres types de champs que le VARCHAR.
Pour l'exemple, stocker des dates dans des champs VARCHAR est une hérésie vorace en termes de performances :
De la même façon, le type INT n'est pas le seul et unique type de champ existant pour des entiers. Il existe également le MEDIUMINT, le SMALLINT et le TINYINT (et également dans l'autre sens le BIGINT, mais là n'est pas le propos). Leur taille est plus faible, ce qui permet de gagner à la fois de l'espace de stockage, et du temps de parcours. Le gain peut, certes, paraître négligeable, mais c'est sur le nombre de champs et le volume de données que l'amélioration de performances est remarquable. De façon générale, c'est une bonne pratique de toujours préférer le contenant le plus ajusté à la taille de vos données pour chacun de vos champs.
Notez que la capacité de stockage positif d'un INT peut être doublée en le déclarant UNSIGNED si vous ne comptez pas y stocker de nombre négatif. Les clés primaires et la plupart des champs TINYINT, MEDIUMINT, SMALLINT, INT, BIGINT peuvent généralement être déclarés en UNSIGNED, et devraient l'être si leurs développeurs n'étaient pas aussi fainéants.
Pour avoir la liste des types de champs disponibles dans MySQL et leur utilisation, je ne saurais trop vous conseiller la lecture très enrichissante de la page traitant de ce sujet sur le manuel en ligne de MySQL.