Bonjour,
j’ai un gro problème avec cette requete ci dessou qui me fait planté easy php.
je doit fair un affichage qui me sortira les origine, l’effectif et la moyenne de commande, logiquement ma requete marche mais elle est trop lourd je voulai savoir si j’ai pas moyen de l’optimisé
car après 3 minute sa me mets: Fatal error: Maximum execution time of 300 seconds exceeded in C:\Program Files\EasyPHP 3.0\phpmyadmin\libraries\dbi\mysqli.dbi.lib.php on line 164
voici la requete:
SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
AVG(co.commandes_montant) AS Mmc
FROM customers cu
INNER JOIN commandes co
ON cu.customers_id=co.customers_id
INNER JOIN relances_gratuites rg
ON cu.customers_id=rg.customers_id
WHERE co.commandes_status='1'
AND rg.relances_gratuites_inscription_date>='" . $date_du . "' AND rg.relances_gratuites_inscription_date<='" . $date_au . "'
GROUP BY Origin "
Ce qui est lourd est le inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
Mais je suis obligé d’avoir ces trois table car je veu avoir les renseignements qui ce trouve entre ces deux dates, de plus si j’enlève la table commande sa marche très bien donc c’est la preuve que c’est un problème d’optimisation
Es-ce qu’il y a une autre façon de faire ou y-a-t-il une solution pour allegé la requette??
Merci

(enfin, vérifie je ne sais pas si c’est le nombre total de ligne dans la table, ou après le WHERE). Je dois avouer ne pas trop comprendre les EXPLAIN PLAN tel qu’ils te le donnent, mais je dirais que pour les deux jointures, il ne semble pas utiliser d’INDEX : vérifie que ton customers_id sur les tables commandes, customer, et relances_gratuites aient bien un INDEX.