IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calcul d'une somme dans une boucle VERSUS Calcul via la fonction MySQL SUM


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut Calcul d'une somme dans une boucle VERSUS Calcul via la fonction MySQL SUM
    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).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    MySQL sera toujours plus rapide que PHP
    y'a avais un article la dessus faudrait que je le retrouve

    EDIT : Trouvé
    http://www.onextrapixel.com/2010/06/...l-performance/


  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La page que tu donnes montre le contraire.

    Si on reprend les temps donnés dans la page, la méthode 1 mettrait dans les 5, la méthode 2 mettrait dans les 7s.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par sabotage Voir le message
    La page que tu donnes montre le contraire.

    Si on reprend les temps donnés dans la page, la méthode 1 mettrait dans les 5, la méthode 2 mettrait dans les 7s.
    on doit pas lire de la même façon, tu les vois ou tes chiffres ?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La méthode 1 c'est le cas "When PHP Calculates The Average" : 5s.

    La méthode 2 c'est le cas "When MySQL Calculates The Average" : 2s avec en plus la meme requête que "When PHP Calculates The Average" sans la partie calculée.
    Donc effectivement ca ne fait pas 5s+2s mais 2 + quelque chose entre 0 et 5s.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par sabotage Voir le message
    La méthode 1 c'est le cas "When PHP Calculates The Average" : 5s.

    La méthode 2 c'est le cas "When MySQL Calculates The Average" : 2s avec en plus la meme requête que "When PHP Calculates The Average" sans la partie calculée.
    Donc effectivement ca ne fait pas 5s+2s mais 2 + quelque chose entre 0 et 5s.
    y'a pas de + quelque chose, le microtime se fait au même endroit, faut tout lire

    Test 1 - Calculating an Average Score
    Using MySQL's AVG() function was 2.64 times faster than the equivalent PHP code

    Test 2 - Formatting a Date
    So for this instance MySQL was 4.76 times faster than the PHP equivalent.

    In Conclusion
    MySQL was up to 5.7 times faster than PHP, this was for TEN THOUSAND runs of the same code.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo