Jump to content

Opérations Mysql Trop Longues...


dtom

Recommended Posts

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...