Auteur Sujet: Question de vitesse d'execution  (Lu 3751 fois)

Hors ligne KiwiToast

  • Membre Complet
  • ***
  • Messages: 158
  • Karma: +1/-0
Question de vitesse d'execution
« le: 03 octobre 2009 à 00:08:59 »
Salut tout le monde !

Je m'excuse par avance du fait que ma question est très interessée et sûrement ininteressante pour vous, mais ... c'est interessé, donc je post.  :P

Evidement, si je post ici, c'est que vous êtes un peu concerné quand même. Parceque, dans le cadre de mon mémoire ( sur les jeux web, pour ceux qui suivent pas ;) ), je cherche à remplir un tableau composé de 110*110 cases. :/ Le principe du tableau : Indiquer, pour chaque jeu du corpus, le nombre de joueurs qu'il partage avec les 109 autres jeux.

Mon problème étant que je n'arrive pas à coder un script qui me fasse ça en un temps raisonnable ( et réalisable pour mon pauvre ordi ), j'ai déjà commencé à réflechir à comment diminuer le nombre de cases à remplir. Deux solutions ont déjà été trouvées :
- Il est inutiles de remplir les cases de la diagonale NO/SE du tableau : le nombre de joueurs du jeu X jouant également au jeu X n'est pas une information pertinente.
- Il y a autant de joueurs du jeu X qui jouent ua jeu Y que de joueurs du jeu Y jouant au jeu X, donc la moitié des cases n'ont pas besoin d'être remplies.

Je me retrouve donc avec "seulement" 5600 cases à remplir.

Malheureusement, tout ça ne sert à rien, puisque mon ordi met déjà plus de 4 minutes à remplir 110 cases. :/ ( et qu'il plante avant les 4h nécéssaires à remplir le tableau )

Du coup, j'aimerais savoir si :
- En utilisant un ordi un peu plus  puissant ( en RAM et processeur ), est-ce que ça irait beaucoup plus vite ? ( au point de devenir réalisable )
- Parmis deux bouts de codes, lequel est le plus rapide à executer ? ( je ne sais pas chronometrer ça )


Premier code :

// On part ( enfin ) chercher l'information : combien de joueurs de $data3 jouent à $data9 ?
$SQL13 = "SELECT COUNT(Reponse) FROM reponses WHERE Question = 11 AND Reponse = ".$data9['ID']." AND ID_Rep IN (SELECT ID_Rep FROM reponses WHERE Question = 11 AND Reponse = ".$data3['ID'].")";
$SQL14 = mysql_query($SQL13);

$jeu[$data9['ID']] = mysql_fetch_array($SQL14);

Deuxième code ( en gros, la même chose mais en php plutôt que SQL ) :
// On part ( enfin ) chercher l'information : combien de joueurs de $data3 jouent à $data9 ?
$SQL13 = "SELECT ID_Rep FROM reponses WHERE Question = 11 AND Reponse = ".$data3['ID']."";
$SQL14 = mysql_query($SQL13);

$jeu[$data9['ID']] = 0;

while($data15 = mysql_fetch_assoc($SQL14)){

$SQL16 = "SELECT Reponse FROM reponses WHERE Question = 11 AND ID_Rep = ".$data15['ID_Rep']."";
$SQL17 = mysql_query($SQL16);

while($data19 = mysql_fetch_assoc($SQL17)){

if($data19['Reponse'] == $data9['ID']){

$jeu[$data9['ID']]++;

}

}

}


Voilà, désolé de vous embêter avec ça, mais j'ai déjà perdu une 10n d'heures sur ce tableau, et je commence à craquer. ^^

Je précise que même si à première vue la seconde solution semble beaucoup plus lente, en pratique j'ai l'impression que c'est pas forcement le cas. :/

Hors ligne Prelude

  • Administrateur
  • Membre Héroïque
  • *****
  • Messages: 1155
  • Karma: +9/-0
    • Mon blog
Re : Question de vitesse d'execution
« Réponse #1 le: 03 octobre 2009 à 09:20:20 »
Sans chercher à aller plus loin, je me demande... L'optimisation d'un code qui ne va être utilisé qu'une seule fois n'est pas forcément nécessaire...
De coup, ne serait-il pas plus opportun de tenter le coup sur un ordi un peu plus puissant (t'as quoi pour que ça rame à ce point ???)
Veux-tu que je te fasse le calcul complet et que je te renvois les résultats ?!

Hors ligne KiwiToast

  • Membre Complet
  • ***
  • Messages: 158
  • Karma: +1/-0
Re : Question de vitesse d'execution
« Réponse #2 le: 03 octobre 2009 à 21:45:57 »
En fait, je me suis reveillé cette nuit avec une idée de génie. :]

Ou plutôt, j'étais trop bête avant, et je le suis devenu moins. ;)

Bref, au lieu de chercher a attribuer des valeurs aux cases, pour les afficher ensuite, j'ai juste créé une table dans ma base et mon script a enreigtré la valeur de chaque case dans la base. Il a fallaut que je redémarre deux ou trois fois l'ordi pour que toutes les cases soient enregistrées, mais vu qu'à chaque fois ça reprenait là ou ça avait bugué ...

Ca roule ! Désolé de t'avoir dérangé pour rien Prélude ! ^^

Hors ligne Prelude

  • Administrateur
  • Membre Héroïque
  • *****
  • Messages: 1155
  • Karma: +9/-0
    • Mon blog
Re : Question de vitesse d'execution
« Réponse #3 le: 04 octobre 2009 à 12:35:12 »
Ce fut un plaisir !  ;)

Hors ligne guile

  • Membre Junior
  • **
  • Messages: 56
  • Karma: +1/-0
Re : Question de vitesse d'execution
« Réponse #4 le: 19 octobre 2009 à 18:38:17 »
Pour info, ce qui me saute aux yeux directement, c'est une boucle qui lance une requête SQL.
C'est exactement le genre de chose qui me fait dire "ouh là! Ca va ramer".

Evite au plus de faire des requêtes dans des boucles.