[Mysql4] Un peu d'adie pour optimiser ma requete
Salut,
J'ai un petit souci avec une de mes requetes qui est un peu longues à s'executer.
Bon alors vla la requete en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
SELECT P.`idproduit`,
CASE
WHEN P_desc.`pourcentage` = - 1 AND P_desc.`prix_barre` = - 1
THEN P_desc.`prix_ht`
ELSE
CASE
WHEN P_desc.`pourcentage` != - 1
THEN P_desc.`prix_ht` - ( (P_desc.`pourcentage` * P_desc.`prix_ht` ) / 100 )
ELSE P_desc.`prix_barre`
END
END
AS `test`
, P_desc.`prix_barre`
, P_desc.`prix_ht`
FROM `produit` P, `produit_famille` P_f , `produit_description` P_desc , `marque` M
WHERE P_desc.`produit_idproduit` = P.`idproduit`
AND P_f.`idproduit` = P_desc.`produit_idproduit`
AND P_f.`idproduit` = P.`idproduit`
AND P_f.`idfamille` = '29'
AND M.`idmarque` = P_desc.`idmarque`
AND P.`idproduit`
= (
SELECT
CASE
WHEN SUM( S.`nbr_produit` ) >0
THEN S.`idproduit`
END AS `idproduitstock`
FROM `stock` S, `boutique` B
WHERE S.`idboutique` = B.`idboutique`
AND B.`internet` = 'true'
AND S.`idproduit` = P.`idproduit`
)
GROUP BY P_desc.`couleur` , P.`idgroupe`
ORDER BY P_desc.`titre` ASC |
Après quelques essais ect j'en ai déduit que ma requete ralentissez à cause de cette contrainte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
AND P.`idproduit`
= (
SELECT
CASE
WHEN SUM( S.`nbr_produit` ) >0
THEN S.`idproduit`
END AS `idproduitstock`
FROM `stock` S, `boutique` B
WHERE S.`idboutique` = B.`idboutique`
AND B.`internet` = 'true'
AND S.`idproduit` = P.`idproduit`
) |
Donc en faites j'aimerais le remplacer par quelque chose de plus performatn... Mais je ne sais pas quoi..
Merci par avance
Re: [Mysql4] Un peu d'adie pour optimiser ma requete
Au niveau de la jointure:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| SELECT ...
FROM produit P
INNER JOIN produit_famille P_f
ON (P_f.idproduit = P.idproduit)
INNER JOIN produit_description P_desc
ON (P_f.idproduit = P_desc.produit_idproduit)
INNER JOIN marque M
ON (M.idmarque = P_desc.idmarque)
INNER JOIN stock S
ON (S.idproduit = P.idproduit)
INNER JOIN boutique B
ON (S.idboutique = B.idboutique)
WHERE P_f.idfamille = 29
AND B.internet = 'true'
GROUP BY P_desc.couleur, P.idgroupe
HAVING SUM(S.nbr_produit) >0 |
Au niveau du select, il y a peut-être plus simple. On va y réfléchir...