dtom Posté(e) le 13 août 2006 Partager Posté(e) le 13 août 2006 Bonjour, Le script que je vais vous présenter recopie une table avec 10 000 entrée en ajoutant des informations. Le recopiage ne prend meme pas 10secondes, tandis que l'opération totale (la derniere partie du code) prend en tout dans les 200secondes. $result = mysql_query ("SELECT * FROM x_world") or die ("Impossible d'executer la requete 50"); while ($row = mysql_fetch_array($result)) { //Joueur $idJoueur = $row ["idJoueur"]; $pseudo= $row ["joueur"]; $peuple = $row ["peuple"]; //Ally $nomAlliance = $row ["alliance"]; $idAlliance = $row ["idAlliance"]; //Village $idVillage = $row ["idVillage"]; $nomVillage = $row ["Village"]; $population = $row ["population"]; $coordX = $row ["X"]; $coordY = $row ["Y"]; $date=date("Y-m-d"); //---> nombre de villages du joueur $result02 = mysql_query ("SELECT idVillage, population FROM x_world WHERE idJoueur='$idJoueur'") or die ("Impossible d'executer la requete 56"); $nbVillagesJoueur = mysql_num_rows($result02); $poulationTotale=0; while ($row03 = mysql_fetch_array($result02)) { $popVillage = $row03 ["population"]; $poulationTotale = $poulationTotale+$popVillage; } (ensuite j'écris dans une table "data_joueurs", serais t'il pas plus rapide ne pas faire d'abord une bete copie, puis ensuite un travail uniquement sur la base "data_joueurs" et la mise a jour des lignes, plutot que de le faire switcher entre deux tables à chacune des 10k lignes?) comment je pourrais optimiser mon code afin de gagner du temps d'éxécution? je précise que si je vire le code $result02 = mysql_query ("SELECT idVillage, population FROM x_world WHERE idJoueur='$idJoueur'") or die ("Impossible d'executer la requete 56"); $nbVillagesJoueur = mysql_num_rows($result02); $poulationTotale=0; while ($row03 = mysql_fetch_array($result02)) { $popVillage = $row03 ["population"]; $poulationTotale = $poulationTotale+$popVillage; } , l'éxécution passe de ~200s à <10s. Je sais que la recherche de toutes les entrées peut être lente, mais a ce point, est-ce normal? Merci d'avance a vous. Lien vers le commentaire Partager sur d’autres sites More sharing options...
RaphAstronome Posté(e) le 13 août 2006 Partager Posté(e) le 13 août 2006 Ne fait pas une requête par joueur (a par pour un traitement lourd type cron) Fait : $result_world = mysql_query ("SELECT * FROM x_world") or die ("Impossible d'executer la requete 50");$result02 = mysql_query ("SELECT idVillage, population FROM x_world") mysql_close(); // Traitement Après tu as plusieurs solutions : - Tu fait des mysql_fetch_array pour le mettre les données des tableaux. (utilise beaucoup de RAM, je te conseille pas vu la taille tu vas avoir des ennuis) - Tu met des "ORDER BY" et tu t'arrange pour synchroniser l'affichage des joueurs et des villages. (utilise l'instruction ORDER BY qui est lourde, n'oublie pas de faire un index sur ces colonnes) Sinon pour ton truc en particuler : SELECT SUM(population) FROM x_world Lien vers le commentaire Partager sur d’autres sites More sharing options...
dtom Posté(e) le 13 août 2006 Auteur Partager Posté(e) le 13 août 2006 mais je dois faire un traitement par joueur, je doit compter son nombre de villages et de points cumulé de ses villages pour éviter de le faire ensuite lors de la lecture et ainsi alléger mon serveur. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 14 août 2006 Partager Posté(e) le 14 août 2006 Tu as la solution de batcher ça, et de voir si c'est si important que ça d'avoir des données à jour? Si non, tu peux mettre en cache (fichier, etc) et éviter de refaire la requête à chaque fois. Lien vers le commentaire Partager sur d’autres sites More sharing options...
dtom Posté(e) le 14 août 2006 Auteur Partager Posté(e) le 14 août 2006 oui pour moi il est important de mettre çà a jour. donc le temps est normal? 190s pour 10 000 entrées Lien vers le commentaire Partager sur d’autres sites More sharing options...
dtom Posté(e) le 14 août 2006 Auteur Partager Posté(e) le 14 août 2006 comment je pourrais faire pour mettre en cache les données? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 15 août 2006 Partager Posté(e) le 15 août 2006 Bonne question Si je prend un exemple phpbb3 écrit le résultat des requêtes dans un fichier en posant des verrous. Ainsi si une requête éxiste déjà, on reprend les résultats. Ensuite d'une je connais pas tes objectifs, ni ce que tu ceux faire, ni ton schéma de table, etc. Donc je ne saurais t'aider plus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
dtom Posté(e) le 16 août 2006 Auteur Partager Posté(e) le 16 août 2006 ce cache serai inutile, mes requêtes seront trés probablement différentes a chaque fois. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.