Conseil creation d'index (composite)
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:
Code:
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 |
Si ça ne retourne rien, soit le produit n'existe pas soit l'utilisateur a scanner un Code_bar2, donc je fais:
Code:
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 |
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.
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:
Code:
CREATE NONCLUSTERED INDEX i_recherche ON Item(Code_bar1), Alias(Code_bar2)
- Cela marcherait il ?
Et du coup je ne ferai plus qu'une requête:
Code:
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 |
-Cela améliorerait il la performance de ma recherche ?
Merci d'avance pour toute suggestion ou commentaire.