Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombre de requêtes / page

Sujet résolu
    6 novembre 2010 à 14:38:11

    Bonjour.

    Je suis actuellement en train de coder un script de messagerie privée et je me rends compte que lorsqu'on lit un MP (en fait une conversation qui regroupe la liste des messages précédemment échangés avec un membre) on peut aller jusqu'à 9 requêtes sur la page !

    Au mieux il y a 5 requêtes (tous les messages ont déjà été lus, donc rien à modifier).
    Au pire il y a 9 requêtes (certains messages n'ont pas encore été lus, il faut donc que je modifie deux tables).

    Voici un listing de toutes les requêtes pour que vous puissiez juger de l'utilité de ces dernières (sachant que deux d'entre elles sont liées à l'architecture de base du site, et n'ont donc rien à voir avec le script de MP. Mais l'une d'elle sera supprimée bientôt).

    Donc pour résumer il y a au mieux 3 requêtes pour le script de MP, au pire 7. Voici la liste des requêtes pour le script de MP :

    Première requête :

    Je récupère les infos sur la conversation (avec pseudo des participants) ainsi que le nombre de MP qu'il reste à lire pour le visiteur de la conversation :

    'SELECT mpc_titre, mpc_idAut, mpc_idRecev, m1.mbs_pseudo auteur, m2.mbs_pseudo recev, m3.mbs_pseudo appart, m3.mbs_nbMps nbMps FROM mp_conv 
    	LEFT JOIN members m1 ON (mpc_idAut = m1.mbs_id) 
    	LEFT JOIN members m2 ON (mpc_idRecev = m2.mbs_id) 
    	LEFT JOIN members m3 ON (mpc_appart = m3.mbs_id)
    	WHERE mpc_num="'.$conv_num.'" AND mpc_appart="'.$mbrId.'"'
    


    Elle est assez lourde celle là car il y a 3 jointures :-° .

    Deuxième requête :

    Je compte juste le nombre de messages dans la conversation (pour la pagination)

    'SELECT COUNT(*) AS nbMsg FROM mp_msg WHERE mpm_appart="'.sortie($mbrId).'" AND mpm_convNum="'.$conv_num.'"'
    


    Troisième requête :

    Je prends tout simplement la liste des messages de la conversation.

    'SELECT * FROM mp_msg LEFT JOIN mbs_infos ON mp_msg.mpm_idAut = mbs_infos.mbsi_idMbr WHERE mpm_convNum="'.$conv_num.'" AND mpm_appart="'.$mbrId.'" ORDER BY mpm_id LIMIT '.$premMsg.', '.$nbMsgPage
    


    Quatrième requête :

    Si le nombre de messages non lus qui ont désormais été lus est > 0 je modifie en les mettant en "lu" (cette req ne s'exécute que si le nombre de non lus > 0).

    'UPDATE mp_msg SET mpm_lu=1 WHERE mpm_appart="'.sortie($mbrId).'" AND mpm_convNum="'.$conv_num.'" AND mpm_id <= "'.$idDernMsg.'"'
    


    Cinquième requête :

    Je fais cette requête si le nombre de non lus ayant été lu > 0, je modifie le nombre de MP du membre d'autant que le nombre de non lus qui ont été lus.

    'UPDATE members SET mbs_nbMps="'.$newNbMps.'" WHERE mbs_id="'.sortie($mbrId).'"'
    


    Sixième requête :

    Je compte le nombre de messages non lus qu'il reste dans la conversation.

    'SELECT COUNT(*) AS nbNnLus FROM mp_msg WHERE mpm_lu=0 AND mpm_appart="'.sortie($mbrId).'" AND mpm_convNum="'.$conv_num.'"'
    


    Septième et dernière requête :

    Si le nombre de la requête 6 = 0 alors je modifie en mettant la conversation (en général) en mode lu

    'UPDATE mp_conv SET mpc_lu=1 WHERE mpc_appart="'.sortie($mbrId).'" AND mpc_num="'.$conv_num.'"'
    


    Je tiens à préciser que les requêtes 7, 6, 5, 4 sont toutes dans la condition qui vérifie si on a lu des messages non lus. Donc de ce coté je ne peux pas rajouter d'autre condition.


    Je vous demande donc, est-ce que 9 requêtes par page (avec les requêtes que je présente) est beaucoup ? Est-ce que ça peut me poser des problèmes de lenteur ?

    Merci par avance de votre aide et merci de m'avoir lu ;) .

    Oneill887.
    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2010 à 14:51:46

      C'est pas tellement le nombre, mais la complexité des requêtes. J'ai créé un outil au boulot qui exécute 30 requêtes à chaque rafraichissement de la page. Pourtant la génération de la page se fait en un claquement de doigt, parce que pour mes requêtes, j'ai créé des index qui leur permettent de parcourir un nombre très faibles de lignes pour trouver leur résultat.
      • Partager sur Facebook
      • Partager sur Twitter
        6 novembre 2010 à 15:16:02

        Merci pour ta réponse :) .

        Citation : rotoclap

        C'est pas tellement le nombre.



        Tu parles uniquement dans le cas général, ou dans mon cas ?

        Pour ma part je ne trouve pas mes requêtes trop complexes (sauf à la limite pour la 1ère, mais je peux pas m'en passer).
        • Partager sur Facebook
        • Partager sur Twitter
          6 novembre 2010 à 16:10:16

          Dans le cas général. Une fois que la connexion est faite, le serveur SQL renvoie vite les réponses.
          • Partager sur Facebook
          • Partager sur Twitter
            6 novembre 2010 à 16:48:53

            Très bien je te remercie.

            Je vais donc laisser comme ça ;) .
            • Partager sur Facebook
            • Partager sur Twitter

            Nombre de requêtes / page

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown