Rechercher : dans
Par :

Requette trop lourd plante easy php

Dernière réponse le 4 mai 2009 à 16:05:55 sinifer, le 4 mai 2009 à 11:18:27 
 Signaler ce message aux modérateurs

Bonjour,

j'ai un gro problème avec cette requete ci dessou qui me fait planté easy php.
mais la question aussi que je me pose et que 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(customers_from LIKE '1st%','1rst',customers_from) AS Origin, 
       COUNT(*) AS effectif, AVG(commandes.commandes_montant) AS Mmc 
FROM customers 
INNER JOIN commandes ON customers.customers_id=commandes.customers_id 
INNER JOIN relances_gratuites ON customers.customers_id=relances_gratuites.customers_id  
WHERE commandes_status='1' AND relances_gratuites_inscription_date>='2009-04-11' AND  relances_gratuites_inscription_date<='2009-04-28'  
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é car je veu avoir les renseignements qui ce trouve entre ces deux dates.

Es-ce qu'il y a une autre façon de faire ou y-a-t-il une solution pour allegé la requette??
Configuration: Windows XP
Firefox 3.0.10

Meilleures réponses pour « requette trop lourd plante easy php » dans :
Easy Ingres VoirEasy Ingres est à Ingres ce que Easy PHP est à MySQL. Téléchargez, installez, et développez ! Configurez facilement un environnement de développement Apache/PHP/Ingres pour Windows sur votre système : Ingres 9.2 Apache 2.2.8 PHP...
Télécharger Easy Resume Creator Pro VoirSi vous êtes à la recherche d’un emploi, la meilleure façon de faire c’est de produire un CV professionnelle qui peut vous devancer des autres candidats. Pour cela, vous avez d’Easy Resume Creator Pro. Easy Resume Creator Pro est un...
Télécharger EasyPHP VoirEasyPHP est un environnement de travail packagé comprenant le serveur web Apache, le système de gestion de bases de données MySQL et le support du langage PHP. Il est fourni avec phpMyAdmin, une interface permettant de manipuler très facilement les...
Installation de EasyPHP VoirIntroduction à EasyPHP Afin de faire fonctionner PHP, il est nécessaire à la base d'en télécharger les sources depuis un site spécialisé (par exemple PHP.net), puis de compiler celui-ci (ainsi que d'éditer les liens) afin de créer un fichier...

1

P@t@ch0n, le 4 mai 2009 à 12:16:57

Je crois que tu n'as aucun index dans tes tables, il serait judicieux d'en créer.

Ta requete n'est pas si lourde que ça.

Répondre à P@t@ch0n

2

sinifer, le 4 mai 2009 à 14:32:36

C'est juste dans relances_gratuites que j'ai pas d'index et comme mes tables on beaucoup de donnée c'est peu être sa qui cloche

Répondre à sinifer

3

sinifer, le 4 mai 2009 à 14:43:13

J'ai regardé pour ajouter des index sur la table relances_gratuites mais sa marche pas

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>='2009-04-26' AND  rg.relances_gratuites_inscription_date<='2009-04-26'  
ALTER TABLE relances_gratuites ADD INDEX (relances_gratuites_inscription_date)
GROUP BY Origin

Répondre à sinifer

4

P@t@ch0n, le 4 mai 2009 à 14:48:42

Fais un EXPLAIN de ta requete initiale.

Répondre à P@t@ch0n

5

sinifer, le 4 mai 2009 à 14:53:10

Voilà ce que sa me met:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE rg ALL NULL NULL NULL NULL 337195 Using where; Using temporary; Using filesort
1 SIMPLE co ALL NULL NULL NULL NULL 382065 Using where; Using join buffer
1 SIMPLE cu eq_ref PRIMARY PRIMARY 4 tti_comedie.rg.customers_id 1 Using where

Répondre à sinifer

6

sinifer, le 4 mai 2009 à 15:33:00

Donc si je me réfère au donné c'est bien la table relances_gratuites qui n'a pas d'index

Répondre à sinifer

7

 sinifer, le 4 mai 2009 à 16:05:55

Ce qui est drôle c'est que quand je fait cette requete j'ai aucun problème sa le fai de suite

SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin, 
       COUNT(*) AS effectif_vg
FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id 
WHERE customers_client='0' 
AND customers_emv='0' 
AND customers_seance ='0' 
AND relances_gratuites_inscription_date>='2009-04-12' and  relances_gratuites_inscription_date<='2009-05-03'
GROUP BY Origin 

Répondre à sinifer