Question d'optimisation de requête !
Bonjour à tous,
J'ai souvent cette interrogation quand j'écris une requête un petit peu complexe, quel est la meilleure façon d'écrire ma requête des if's || des unions ? Et il y a un cas que est un peu récurent et pour lequel j'aimerai avoir votre avis :
Je dois récupérer des données mais il n y a pas un cas de figure mais plusieurs, alors qu'est ce qui est le mieux faire des if (sur des champs récupérer dans un table temp) et des jointures parfois un peu tordu ou encore délimiter les cas avec des UNION ?
Je vais prendre mon cas actuel comme exemple :
Je veux récupérer un produit et l'arborescence des catégories qui le contient (au maximum on a une rubrique > Sous-rubrique > Sous-Sous-Rubrique au minimum Rubrique)
Donc quel est le mieux à faire :
Code:
1 2 3 4 5 6 7
| if(Sous-rubrique is null and Sous-Sous-Rubrique is null)
Begin
SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub, p2.Lbl as LBL-Prod, p2.Url as URL-Prod
FROM Prod pr, Rub r, Page as p1, Page as p2
WHERE pr.Fk_Rub = r.Pk_Rub AND p2.Fk_Rub = r.Pk_Rub AND pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId
if(Sous-rubrique is null and Sous-Sous-Rubrique is not null) ... |
Et encore ça c'est le cas le plus simple (en plus j'ai un peu simplifié puisque je dois faire des vérification métier ...).
Ou faire :
Code:
1 2 3 4 5 6 7 8 9
| SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub
FROM Prod pr, Page as p1
WHERE pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId
UNION
SELECT p2.Lbl as LBL-Prod, p2.Url as URL-Prod
FROM Rub r, Page as p2, Prod as pr
WHERE p2.Fk_Rub = r.Pk_Rub AND pr.Pk_Prod = @ProdId AND pr.Fk_Rub = r.Pk_Rub |
ect ...
Quand dites vous ?
J'espère que j'ai été claire, en vous remerciant.