L'ordre des colonnes a eu un impact important sur les performances de certaines des bases de données que j'ai réglées, couvrant Sql Server, Oracle et MySQL. Ce message a bonnes règles empiriques :
- Colonnes de clé primaire en premier
- Colonnes de clé étrangère ensuite.
- Colonnes fréquemment recherchées ensuite
- Colonnes fréquemment mises à jour plus tard
- Les colonnes Nullable sont les dernières.
- Les colonnes nullables les moins utilisées après les colonnes nullables les plus fréquemment utilisées
Un exemple de différence de performances est une recherche d'index. Le moteur de base de données trouve une ligne en fonction de certaines conditions dans l'index et récupère une adresse de ligne. Supposons maintenant que vous recherchiez SomeValue et qu'elle se trouve dans ce tableau :
SomeId int,
SomeString varchar(100),
SomeValue int
Le moteur doit deviner où commence SomeValue, car SomeString a une longueur inconnue. Cependant, si vous changez la commande en :
SomeId int,
SomeValue int,
SomeString varchar(100)
Maintenant, le moteur sait que SomeValue peut être trouvée 4 octets après le début de la ligne. L'ordre des colonnes peut donc avoir un impact considérable sur les performances.
EDIT :Sql Server 2005 stocke les champs de longueur fixe au début de la ligne. Et chaque ligne a une référence au début d'un varchar. Cela annule complètement l'effet que j'ai énuméré ci-dessus. Ainsi, pour les bases de données récentes, l'ordre des colonnes n'a plus d'impact.