optimisation d'une requete jugée lente

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 : optimisation d'une requete jugée lente

Re: optimisation d'une requete jugée lente

par Berzemus » 19 avr. 2010, 14:01

voici ma foncion complete:
Je ne me souviens pas l'avoir demandé.

Par contre, savoir ce qu'en dit MySQL (avec EXPLAIN) ou savoir si chaque champ utilisé dans ton where est bien indexé...

Si du moins c'est la requête qui est lente (facile à vérifier, suffit de l'entrer dans phpmyadmin) et non ton code qui traine la patte.

Re: optimisation d'une requete jugée lente

par stealth35 » 19 avr. 2010, 13:32

et ta class dbaccess elle ressemble a quoi ?

Re: optimisation d'une requete jugée lente

par ynk-master » 19 avr. 2010, 13:28

voici ma foncion complete:
public function listallConf($complement_requete = "", $limite_requete = "",$user=1,$type=0) {
		global $db;
		$req_privees="";
		if($user!=0){
			//$req="SELECT NumNant FROM contenant WHERE CodFam <> 0 and PriveNant = 0 UNION"
						   $req=" SELECT NumNant FROM accescontenant WHERE NumRole = ".$user;//modif yannick
			$reponse = $this->dbaccess->exec_query($req);
			$i=0;
			while($ligne=$this->dbaccess->fetch_row($reponse)){
				$tab[$i]=$ligne[0];
				$i++;
			}
			$serieNum=implode(",",$tab);			
			// Si pas admin, afficher toutes les salle publiques + les privées attribuées au role de l'utilisateur.
			$req_privees = " AND RC.NumNant IN (".$serieNum.")";
		}			 
						
		$req = "SELECT RN.NumResion, RC.DateDeb, NomResant, LibResion, DateResion, ConfResion, FactResion , DenoStruc, Tel1Struc "
				."FROM reservation RN, reservant RT, structure ST, reservcontenant RC "
				."WHERE RN.NumResant = RT.NumResant AND ConfResion = ".$type." AND RT.NumStruc = ST.NumStruc AND RC.NumResion = RN.NumResion ".$req_privees;
				
		if(strlen($complement_requete)!=0)
		{
			$req .= $complement_requete;
		}
		$req .= " GROUP BY RN.NumResion ORDER BY DateResion Desc, RN.NumResion ";
		if(strlen($limite_requete)!=0)
		{
			$req .= $limite_requete;
		}
		//echo $req;
		$result = $this->dbaccess->exec_query($req);
		if ($result == FALSE) {
			echo "Erreur lors de la consultation de la table ".$db.".reservation.";
			return FALSE;
		}
		$i = 0;
		$liste[$i] = $this->dbaccess->fetch_array($result);
		while ($liste[$i] != FALSE) {
			$i++;
			$liste[$i] = $this->dbaccess->fetch_array($result);
		}
		return $liste;
	}

Re: optimisation d'une requete jugée lente

par Berzemus » 19 avr. 2010, 12:53

Si ça ne pouvait dépendre que de la requête..

Qu'en est-il des index sur la table ? pour chaque champ interrogé dans le where, il devrait y en avoir un. Quel est leur format ? Que dit le EXPLAIN de MySQL ?

optimisation d'une requete jugée lente

par ynk-master » 19 avr. 2010, 12:06

Bonjour,
je cherche un moyen efficace d'optimiser cette requete jugée lente:
$req_privees = " AND RC.NumNant IN (".$serieNum.")";
      }         
                  
      $req = "SELECT RN.NumResion, RC.DateDeb, NomResant, LibResion, DateResion, ConfResion, FactResion , DenoStruc, Tel1Struc "
            ."FROM reservation RN, reservant RT, structure ST, reservcontenant RC "
            ."WHERE RN.NumResant = RT.NumResant AND ConfResion = ".$type." AND RT.NumStruc = ST.NumStruc AND RC.NumResion = RN.NumResion ".$req_privees;