[RESOLU] Optimisation requête sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Optimisation requête sql

Re: Optimisation requête sql

par Bisvan » 05 avr. 2016, 08:26

Super cela a changé radicalement le temps d’exécution (de 5mn à 10sec !).
J'ai indexé les idcategorie, idproduit, numcommande.

merci !

Re: Optimisation requête sql

par @rthur » 04 avr. 2016, 15:41

Non, il n'y a rien à modifier dans tes requêtes quand tu poses un index.
Le fait de poser un index permet juste à ton serveur de base de données de savoir que tu va probablement faire des recherches ou des tris sur ces champs, il va donc effectuer en quelque sorte un pré-traitement qui permettra d'accélérer ensuite le traitement des requêtes.

Après si ça n'est pas suffisant, tu pourras essayer d'optimiser davantage tes requêtes mais la 1ère des choses à faire c'est déjà des index.

Re: Optimisation requête sql

par Bisvan » 04 avr. 2016, 14:31

Est ce que le fait d'indexer ces données m'obligent à modifier mes requêtes ?

Re: Optimisation requête sql

par @rthur » 04 avr. 2016, 14:24

Bonjour,

Tu peux déjà mettre des index sur tous tes id et assimilés : numcommande, idcat, idproduit

Optimisation requête sql

par Bisvan » 04 avr. 2016, 14:15

Bonjour,


Je dois traiter un certains nombre de résultats provenant de requête sql et d'une base mysql.
Pour l'heure mon script est vraiment très long à s'exécuter, auriez vous une idée pour m'aider à simplifier cette requête et gagner du temps d’exécution ?

Pour l'heure je n'ai pas créé d'index sur mes tables mais je ne sais trop quoi choisir comme index pertinent.
En gros j'ai une table CATEGORIE PRODUIT dont j'extrais un idcategorieproduit. J'ai une table PRODUITS avec idcatproduit et idproduit.
Ensuite une table COMMANDE (avec numerocommande) et COMMANDE CONTENU (avec idcatproduit, idproduit, quantite, total_ttc)

Le but est d'affiché pour chaque catégorie de produit, la liste des produits commandés de cette catégorie à une date donnée.
// 1 J'enregistre mes catégorie produits dans un array : $categorieproduit['idcat']
// 2 je boucle sur mes catégories de produits
foreach ($categorieproduit['idcat'] as $key => $val)
{
	$idcat_boucle=$categorieproduit['idcat'][$key];
	
        // 3 Je recherche les commandes pour un mois et année donnée
	$result_C = mysql_query("select numcommande, datelivraison, statut FROM $MATABLECOMMANDE WHERE (MONTH(datelivraison)='$MOIS' and YEAR(datelivraison)='$ANNEE') order by numcommande");
	while ($r_C = mysql_fetch_array($result_C)) 
	{
               $numcommande= $r_C['numcommande'];
               // 4 je boucle sur le contenu de ces commandes et j'enregistre les produits dans un tableau multidimensionnel
		$result_D = mysql_query("select idproduit,tarif_ttc,idcat,tarif_ht,quantite,idtva,nomproduit,tarif_tva FROM $MATABLECONTENUCMDE WHERE numcommande='$numcommande' and idcat='$idcat_boucle' order by idproduit");
		while ($r_D = mysql_fetch_array($result_D)) 
		{
			$idproduit=$r_D['idproduit'];
			$tarif_ttc=$r_D['tarif_ttc'];
		        $idcat=$r_D['idcat'];
			$CALCUL_tarif_ht=$r_D['tarif_ht'];
			$CALCUL_quantite=$r_D['quantite'];
			$CALCUL_idtva=$r_D['idtva']; 

 			// J'affiche le résultat de cette requête produit
			echo ''.$idcat.' > '.$idproduit.' > '.$tarif_ttc.'';
		}
       }
}