Bonjour,
Je viens vers vous car depuis hier j'ai une question qui trotte dans ma tête...
Chez un client, nous avons une base de données assez volumineuse, qui offre des performances très médiocres.
La faute avant tout à la modélisation, mais c'est un modèle éditeur, donc faut se faire une raison : faut faire avec.
En revanche, j'ai lu il y a quelques jours un article de SQLpro qui date un peu (à l'époque où 4 Go de RAM pour un serveur était le bout du monde) et orienté SQL Server, sur l'optimisation des bases de données, et notamment sur les index.
Il dit que l'ordre des colonnes doit être du plus discriminant vers le moins discriminant.
Hors, dans la base, les colonnes dans les index proposés par l'éditeur sont dans l'ordre... "fonctionnel".
A savoir, par exemple pour la table des "tiers" :
1/ Code société
2/ Type de tiers
3/ Code du tiers
Selon le contexte, on a entre 1 et 100 code sociétés différents, une dizaine de type de tiers différentes, et quelques centaines de milliers de codes différentes.
Pour un même numéro de société, on retrouve plus ou moins l'ensemble des types de tiers, et chaque type de tiers dans chaque société à sa numérotation propre, donc avec des doublons.
Si j'écoute l'arcicle de SQLpro, je suis tenté de recréer l'article avec les colonnes suivantes :
1/ Code du tiers
2/ Code société
3/ Type du tiers
Est-ce que je vais vraiment y gagner quelque chose, ou si c'est vraiment qu'une optimisation valable (à l'époque) pour SQL Server ?
J'ai d'autres tables où c'est plus gros encore :
Colonne1 : 100 valeurs uniques
Colonne2 : 10 valeurs uniques
Colonne3 : Plusieurs centaines de millions (milliards ?) de valeurs uniques
Colonne4 : 100 valeurs uniques
Colonne5 : 1 unique valeur (fonctionnalité pas utilisée)
=> Est-ce que si je passe colonne3 en premier je peux m'attendre à un miracle ? Au moins une petite amélioration ?
Partager