Accélération d'un ensemble de requêtes via Pdo et préparation

Accélération d'un ensemble de requêtes via Pdo et préparation - SQL/NoSQL - Programmation

Marsh Posté le 24-06-2015 à 18:13:00    

Bonjour à tous,

 

J'ai une tache Cron pour une application Web en php qui dure 30min en mysqli. En fouillant le net j'ai cru comprendre que l'utilisation de requêtes préparé permet d'accélérer le traitement, je suis donc passé sur du PDO avec des requêtes préparées et le traitement ne dure plus que 19min !

 

Après vérification les données enregistrés semblent OK, mais j'aurais aimé avoir votre avis sur le principe de mon script, si j'ai rien oublié, ou si, il y'a des choses à revoir, car je ne maitrise pas encore PDO ^^, merci beaucoup

 
Code :
  1. $nomTableTemp = "test_".time();
  2. // PDO
  3. $conn = new conn;
  4. $pdo  = $conn->newCon('');
  5. // req 1
  6. $queryPos  = "SELECT count(utilisateur_idutilisateur) FROM ".$nomTableTemp." WHERE rank BETWEEN :rangDebut AND :rangFin";
  7. $prep   = $pdo->prepare($queryPos);
  8. $rangDebut;
  9. $rangFin;
  10. $prep->bindParam(':rangDebut', $rangDebut, PDO::PARAM_INT);
  11. $prep->bindParam(':rangFin', $rangFin, PDO::PARAM_INT);
  12. // REQ 2
  13. $queryPrime = "INSERT INTO table (val1,val2,val3,val4,val5,val6,val7,val8,val9,val10)
  14.   VALUES (:val1,NOW(),0,NOW(),:val2,:val3,:val4,'',:val5,:val6)";
  15. $prepPrime = $pdo->prepare($queryPrime);
  16. $val1;
  17. $val2;
  18. $val3;
  19. $val4;
  20. $val5;
  21. $val6;
  22. $prepPrime->bindParam(':val1', $val1, PDO::PARAM_INT);
  23. $prepPrime->bindParam(':val2', $val2, PDO::PARAM_STR);
  24. $prepPrime->bindParam(':val3', $val3, PDO::PARAM_INT);
  25. $prepPrime->bindParam(':val4', $val4, PDO::PARAM_INT);
  26. $prepPrime->bindParam(':val5', $val5, PDO::PARAM_STR);
  27. $prepPrime->bindParam(':val6', $val6, PDO::PARAM_STR);
  28. // Fin préparation requêtes
  29. // Création d'une table temporaire
  30. $query = " CREATE TABLE ".$nomTableTemp." SELECT * FROM uneautreTable";
  31. $result = mysqli_query($link, $query) or die(mySqlMailError($query." ".mysqli_error($link)));
  32. $query  = "SELECT * FROM ".$nomTableTemp;
  33. $result = mysqli_query($link,$query ) or die(mySqlMailError($query." ".mysqli_error($link)));
  34. deconnexionV3($link);
  35. // Début d'un While sur 65000 enregistrement
  36. while($dataMatrice = mysqli_fetch_array($result )){
  37. // Creation des variables pour la requêtes préparé
  38. $rangDebut = "un calcul";
  39. $rangFin = "un autre calcul";   
  40.      // Execution de la première requête
  41. try{
  42.  $prep->execute();
  43.      if($prep->rowCount()==1){
  44.   $dataP = $prep->fetch();
  45.    }
  46. }
  47. catch(PDOException $e){
  48.  $retour = FALSE;
  49.  exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
  50. }
  51. // Un controle de résultat de la requete préparé N1
  52. if($dataP['valeur']!='0'){
  53.              
  54.  try{
  55.   $prepPrime->execute();
  56.       }
  57.        catch(PDOException $e){
  58.            exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
  59.       }
  60.    
  61.      }// Fin controle valeur
  62. } // Fin du While
  63. $link     = connexionV3('');
  64. $sqlDrop = "DROP TABLE ".$nomTableTemp;
  65. $reqDrop  = mysqli_query($link,$sqlDrop) or die(mySqlMailError($sqlDrop." ".mysqli_error($link)));
  66. deconnexionV3($link);
  67. //Clore la requête préparée
  68. $prep->closeCursor();
  69. unset($prep);
  70. $prepPrime->closeCursor();
  71. unset($prepPrime);


Message édité par kontas le 24-06-2015 à 18:13:37
Reply

Marsh Posté le 24-06-2015 à 18:13:00   

Reply

Sujets relatifs:

Leave a Replay

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