Tout est dans le titre... Je souhaite présenter des données extraites de la base de données accompagnés de leur totaux respectifs. Je me pose alors des questions sur la performance pour le calcul de ses sommes. Quel est la méthode la plus performante ?
Je vois deux pistes possibles.
1 - Calculer la somme dans une boucle après avoir récupérer les données d'une requête SQL.
2 - Calculer la somme à l'aide de la fonction MySQL SUM
Afin d'illustrer mon propos, un p'tit exemple
//--------[1er Méthode]--------\\
On effectue une seul requête SQL pour récupérer les informations. Le calcul de la somme se fait de manière itérative dans le parcours du curseur (boucle while).
1 2 3 4 5 6 7 8 9 10 11 12
| $sql = 'SELECT id, valeur1, valeur2 FROM table';
$query = mysql_query($sql);
$sumValeur1 = 0;$sumValeur2 = 0;
echo "<pre>";
echo "id | valeur1 | valeur2<br/>";
while($resultat = mysql_fetch_object($query)) {
echo $resultat->id."|".$resultat->valeur1."|".$resultat->valeur2."<br/>";
$sumValeur1 += $sumValeur1 + $resultat->valeur1;
$sumValeur2 += $sumValeur2 + $resultat->valeur2;
}
echo "total | ".$sumValeur1."|".$sumValeur2;
echo "</pre>"; |
//--------[2nd Méthode]--------\\
Dans ce cas, on effectue deux requêtes SQL, une première pour récupérer les données et une seconde pour calculer la somme avec la fonction MySQL SUM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $sql = 'SELECT id, valeur1, valeur2 FROM table';
$query = mysql_query($sql);
echo "<pre>";
echo "id | valeur1 | valeur2<br/>";
while($resultat = mysql_fetch_object($query)) {
echo $resultat->id."|".$resultat->valeur1."|".$resultat->valeur2."<br/>";
}
$sqlSomme = 'SELECT
SUM(valeur1) as sumValeur1,
SUM(valeur2) as sumValeur2
FROM table';
$querySomme = mysql_query($sqlSomme);
$resultatSomme = mysql_fetch_object($querySomme);
echo "total | ".$resultatSomme->sumValeur1."|".$resultatSomme->sumValeur2;
echo "</pre>"; |
Quel méthode est la plus performante ?
Il est évident que si la table ne contient que 20 enregistrements, la question ne se pose même pas...
Si vous avez des pistes, chuis preneur ^^
Merci d'avance
Partager