http://toptech.geekaddict.net/
Reprenons donc maintenant la table que je vous avais présentée au départ comme plus optimisée :
id SMALLINT(4) au lieu de INT(4)
Si je sais que id sera un nombre à 4 chiffres (ici, ce serait par exemple si je ne comptais pas inscrire plus de 9999 lignes dans cette table) alors le SMALLINT suffit puisqu'il va jusqu'à 65 535.
pseudo VARCHAR(40) au lieu de TEXT
On aurait aussi pu choisir TINYTEXT ou TINYBLOB. Tous prendrons comme espace la longueur du pseudo + 1 et le pseudo sera limité à 40 caractères sans avoir besoin d'aucun traitement. (Pour un pseudo, c'est plutôt bien de ne pas pouvoir dépasser une certaine longueur, sinon gare à l'affichage, les pseudo qui dépassent l'écran...). Niveau optimisation, on ne gagne qu'un seul octet mais c'est déjà ça.
date DATE au lieu de VARCHAR(10)
Ici on gagne 7 octets (soit 70% de la place initialement occupée) et les dates sont forcément valides. Pas besoin de vérifier que la date insérée est au bon format. Vous pouvez insérer mysql_real_escape_string($_POST['date']) directement dans la table sans risquer d'avoir des blagues du genre "aujourdhui" qui aurait pu être écrit dans un VARCHAR.
design_choisi SET au lieu de VARCHAR(16)
Toujours plus fort, là on gagne 15 octets (soit 94%). Avec 3 choix, SET ne prend que 1 octet. On aurait aussi pu choisir ENUM mais pour le même prix, on peut avoir la possibilité de n'avoir aucun design, ou plusieurs (après, c'est à vous de voir...)
telephone INT(10) au lieu de VARCHAR(10)
Gain de 6 octets (60%) et l'attribut ZEROFILL se charge de rajouter les zéros qui manquent pour faire 10 chiffres.
Au final, il n'y a que 3 règles à retenir :
Le type de valeur retournée doit correspondre aux valeurs que vous enregistrez afin que leur traitement en sortie soit optimal.
Les limites doivent être les plus restrictives possibles tout en laissant suffisemment de possibilité pour que le champ réponde à tous vos besoins.
Le poids doit être le plus petit possible.
Et voici sous forme de tableau la liste des champs que nous avons étudiés dans ce tutoriel et leurs propriétés les plus importantes. Je vous invite à vous y référer aussi souvent que nécessaire :
Type
de colonne Poids Type de valeur
retournée Limite
Types numériques
TINYINT 1 Nombre entier [-127 ; 127] ou [0 ; 255] en UNSIGNED
SMALLINT 2 Nombre entier [-32 768 ; 32 767] ou [0 ; 65 535]
MEDIUMINT 3 Nombre entier [-8 388 608 ; 8 388 607] ou [0 ; 16 777 215]
INT 4 Nombre entier [-2 147 483 648 ; 2 147 483 647] ou [0 ; 4 294 967 295]
BIGINT 8 Nombre entier [-9,22 x1018 ; 9,22 x1018] ou [0 ; 1,84 x1019]
FLOAT 4 Nombre à virgule 24 chiffres
DOUBLE 8 Nombre à virgule 53 chiffres
DECIMAL 8 Nombre à virgule 53 chiffres
Types date et heure
TIMESTAMP 4 Nombre entier [19700101000000 ; 20380119041407]
YEAR 1 Nombre entier [1901 ; 2155]
DATE 3 Chaîne [1000-01-01 ; 9999-12-31]
DATETIME 8 Chaîne [1000-01-01 00:00:00 ; 9999-12-31 23:59:59]
TIME 3 Chaîne [00:00:00 ; 23:59:59]
Types chaînes
CHAR M Chaîne 255 caractères (pour M, voir Champs de texte)
VARCHAR L+1 Chaîne 255 caractères (L est la longueur du texte)
TINYTEXT L+1 Chaîne 255 caractères
TEXT L+2 Chaîne 65 535 caractères
MEDIUMTEXT L+3 Chaîne 16 777 215 caractères
LONGTEXT L+4 Chaîne 4 294 967 296 caractères
Types binaires
TINYBLOB L+1 Chaîne binaire 255 caractères
BLOB L+2 Chaîne binaire 65 535 caractères
MEDIUMBLOB L+3 Chaîne binaire 16 777 215 caractères
LONGBLOB L+4 Chaîne binaire 4 294 967 296 caractères
Types à choix multiples
SET 1 Chaîne 8 choix
SET 2 Chaîne 16 choix
SET 3 Chaîne 24 choix
SET 4 Chaîne 32 choix
SET 8 Chaîne 64 choix
ENUM 1 Chaîne 255 choix
ENUM 2 Chaîne 65 535 choix