Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
812 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  on peut optimiser des requetes simples avec php ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

on peut optimiser des requetes simples avec php ?

n°677142
swich
snps
Posté le 18-03-2004 à 14:48:10  profilanswer
 

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.

mood
Publicité
Posté le 18-03-2004 à 14:48:10  profilanswer
 

n°677143
ratibus
Posté le 18-03-2004 à 14:50:17  profilanswer
 

on peut voir ton code ?

n°677149
swich
snps
Posté le 18-03-2004 à 14:59:06  profilanswer
 

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. }


 

n°677157
stb
Posté le 18-03-2004 à 15:12:41  profilanswer
 

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...

n°677162
ratibus
Posté le 18-03-2004 à 15:15:37  profilanswer
 

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
n°677164
swich
snps
Posté le 18-03-2004 à 15:19:08  profilanswer
 

nomprofil est ma cle principale

n°677166
ratibus
Posté le 18-03-2004 à 15:20:25  profilanswer
 

ok
t'as essayé mon code ?

n°677291
swich
snps
Posté le 18-03-2004 à 16:30:30  profilanswer
 

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

n°677303
ratibus
Posté le 18-03-2004 à 16:41:22  profilanswer
 

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

n°677626
Mosca
Posté le 18-03-2004 à 22:58:02  profilanswer
 

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à ...

mood
Publicité
Posté le 18-03-2004 à 22:58:02  profilanswer
 

n°677722
swich
snps
Posté le 19-03-2004 à 09:07:12  profilanswer
 

c oracle 7.3 :'(

n°677727
ratibus
Posté le 19-03-2004 à 09:19:31  profilanswer
 

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

n°677733
swich
snps
Posté le 19-03-2004 à 09:28:55  profilanswer
 

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
n°679500
jolly
Posté le 21-03-2004 à 22:42:54  profilanswer
 

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  
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  on peut optimiser des requetes simples avec php ?

 

Sujets relatifs
Connection MySql et requêtes parallèlesrequête SQL à optimiser
MySQL : pb de ram perdue + requetes "sub select"[ACCESS] requetes et sous requetes
[FLASH] Pb avec 2 simples boutons[PHP] deux requetes SQL ?
While ... avec plusieurs requetes simultanées...Requêtes imrbiquées avec MySQL ?
[DB2] Requetes avec distinct sur une colonneédition ou requêtes vers un fichier .db4
Plus de sujets relatifs à : on peut optimiser des requetes simples avec php ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR