Bonjour bonjour,
Voila, dans un souci de performance, je me suis intéressé a la création d'index. Voici mes tables:
Table: Item
Colonnes: ID_item, Code_bar1
Table: Alias
Colonnes: ID_alias, Item_id, Code_bar2
(Item_id étant la clé étrangère correspondant a ID_item)
Chaque "produit" possède nécessairement un Code_bar1, mais pas nécessairement un Code_bar2.
Lorsqu'un utilisateur scanne un code bar, je ne sais pas si il s'agit du code bar 1 ou 2, mais sachant que dans 75% des cas il s'agit du code bar1.
Pour l'instant, je n'ai pas d'index, et je fais la requête suivante:
Si ça ne retourne rien, soit le produit n'existe pas soit l'utilisateur a scanner un Code_bar2, donc je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT i.ID_item, i.Code_bar1, a.Code_bar2 FROM Item AS i LEFT OUTER JOIN Alias AS a ON i.ID_item=a.Item_id WHERE i.Code_bar1=@MaValeur
Mes performance pour le premier cas, sont la plupart du temps de 2 secondes mais parfois peut aller jusqu'à 10 secondes. On m'a donc suggérer de créer des index pour Item.Code_nar1 et Item.Code_bar2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT i.ID_item, i.Code_bar1, a.Code_bar2 FROM Item AS i LEFT OUTER JOIN Alias AS a ON i.ID_item=a.Item_id WHERE a.Code_bar2=@MaValeur
Mais en cherchant un peu, j'ai appris l'existence des indexation composite. Mon idées serait donc de créer un index du genre:
- Cela marcherait il ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE NONCLUSTERED INDEX i_recherche ON Item(Code_bar1), Alias(Code_bar2)
Et du coup je ne ferai plus qu'une requête:
-Cela améliorerait il la performance de ma recherche ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT i.ID_item, i.Code_bar1, a.Code_bar2 FROM Item AS i LEFT OUTER JOIN Alias AS a ON i.ID_item=a.Item_id WHERE i.Code_bar1=@MaValeur OR a.Code_bar2=@MaValeur
Merci d'avance pour toute suggestion ou commentaire.
Partager