on peut optimiser des requetes simples avec php ?

on peut optimiser des requetes simples avec php ? - PHP - Programmation

Marsh Posté le 18-03-2004 à 14:48:10    

RE tt le monde
voila, je veux construire une liste deroulante. les valeurs a inclures proviennent d'une BDD oracle.
le problème est que lorsque je demande a php de remplir ma liste, il met super longtemps (genre 10s pour 1500valeurs) alors que ca prend a peine 1s a la bdd.
je fais ma requete :  
select nom from table order by nom
et ensuite je met ds un tableau (pq j'ai 2 liste a creer avec les memes valeurs)
 
et je cree ma liste avec mon tableau.

Reply

Marsh Posté le 18-03-2004 à 14:48:10   

Reply

Marsh Posté le 18-03-2004 à 14:50:17    

on peut voir ton code ?

Reply

Marsh Posté le 18-03-2004 à 14:59:06    

en gros je fais :  

Code :
  1. include 'connex.php';
  2. $list=$g_connexAdmin->getProfil();
  3. $d = count($list);
  4. $i=0;
  5. while ($i<$d)
  6. {
  7.    $profil=$list[$i];
  8.    $i++;
  9.    echo "<OPTION VALUE=\"$profil\">$profil";
  10. }


 
 
 
 
et la fonction qui recupere  

Code :
  1. function getProfil() {
  2.    $query = "select NOMPROFIL from PROFIL order by NOMPROFIL\n";
  3.    if (!ora_parse($this->cursor,$query))
  4.    {exit;}
  5.    else
  6.    {
  7.       if (!ora_exec($this->cursor))
  8.       {exit;}
  9.       else
  10.       {$i=0;
  11.        while (ora_fetch($this->cursor))
  12.   {
  13.             $profil = trim(ora_getcolumn($this->cursor,0));
  14.     $lesProfil[$i]=$profil;
  15.             $i++;
  16.   }
  17.       }
  18.     }
  19.     return $lesProfil;
  20. }


 

Reply

Marsh Posté le 18-03-2004 à 15:12:41    

10s ?
 
de génération du texte ou de transfert vers ton navigateur ?
 
sinon, ma seul optimisation possible c'est de faire retourner à ta fonction un chaine qui contient directement les "<option>".
 
tu génere un tableau pour le re-parcourir, tu mets donc 2x fois plus de tps, a part ça...

Reply

Marsh Posté le 18-03-2004 à 15:15:37    

Moi dans un premier temps je ferais (je sais pas si ça améliore bcp faut que tu me dises ):  

Code :
  1. include 'connex.php';
  2. $list=$g_connexAdmin->getProfil();
  3. foreach ($list as $profil)
  4. {
  5.    echo '<OPTION VALUE="'.$profil.'">'.$profil;
  6. }


 
et la fonction qui recupere  

Code :
  1. function getProfil() {
  2.    $query = "select NOMPROFIL from PROFIL order by NOMPROFIL\n";
  3.    if (!ora_parse($this->cursor,$query) || !ora_exec($this->cursor) ) {
  4.       exit;
  5.    } else {
  6.        while (ora_fetch($this->cursor)) {
  7.           $lesProfil[]=trim(ora_getcolumn($this->cursor,0));
  8.        }
  9.    }
  10.    return $lesProfil;
  11. }


 
Sinon t'as un index sur NOMPROFIL ?


Message édité par ratibus le 18-03-2004 à 15:21:26
Reply

Marsh Posté le 18-03-2004 à 15:19:08    

nomprofil est ma cle principale

Reply

Marsh Posté le 18-03-2004 à 15:20:25    

ok
t'as essayé mon code ?

Reply

Marsh Posté le 18-03-2004 à 16:30:30    

ca change pas...
je crois meme que le for each est plus long que le while..
pour les 10s, il s'agit de 10s entre le temps ou j'appuye sur mon bouton et le temps où la page s'affiche

Reply

Marsh Posté le 18-03-2004 à 16:41:22    

affiche le temps de génération de la page en utilisant microtime() (www.php.net/microtime)
 
et si le code HTML généré est long, utilise ça au début de ton script PHP : ob_start("ob_gzhandler" ); pour compresser les pages envoyés au client

Reply

Marsh Posté le 18-03-2004 à 22:58:02    

Perso je fais ça, avec OCI8 :

Code :
  1. <?php
  2. include("connect.inc" );
  3. $query = ("select table_name from dba_tables" );
  4. $parsed = ociparse($db_conn,$query);
  5. ociexecute($parsed);
  6. $nrows=ocifetchstatement($parsed, $result);
  7. echo "<html><center><select>";
  8. for ($i = 0; $i < $nrows; $i++)
  9. {
  10. echo "<option>";
  11. echo $result["TABLE_NAME"][$i];
  12. echo "</option>";
  13. }
  14. echo "</select></center></html>";
  15. ?>


 
Ca prend 2 sec pour 3000 records là ...

Reply

Marsh Posté le 18-03-2004 à 22:58:02   

Reply

Marsh Posté le 19-03-2004 à 09:07:12    

c oracle 7.3 :'(

Reply

Marsh Posté le 19-03-2004 à 09:19:31    

t'as calculé le temps de génération ?
il fait réellement 10 s ?

Reply

Marsh Posté le 19-03-2004 à 09:28:55    

ob_start("ob_gzhandler" ) -> ca ameliore un peu thx :)
(je suis a 4s maintenant)


Message édité par swich le 19-03-2004 à 09:31:02
Reply

Marsh Posté le 21-03-2004 à 22:42:54    

utilise la fonction de bufferisation des données en envoi ca permettra de gagner du temps je pense ..
c le transfert au fur et a mesure qui est long  
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed