Aller au contenu

Opérations Mysql Trop Longues...


dtom

Messages recommandés

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...