Partage
  • Partager sur Facebook
  • Partager sur Twitter

Optimisation requête sql

    27 novembre 2011 à 23:40:30

    Bonsoir,

    j'ai un problème avec mes requêtes SQL, elles sont trop longues, presque 2 sec pour récupérer 3 enregistrement.

    je dispose de +200 000 lignes dans ma base de donnée.


    Voici un exemple de requête :


    SELECT uploads.id, name, image_small, description, SUM( download ) download, uploads.view, hoster, id_user, login, qualite, language, SUM( size ) size, streaming, links.date
    FROM movies
    LEFT JOIN uploads ON movies.id_upload = uploads.id
    LEFT JOIN links ON uploads.id = links.id_upload
    LEFT JOIN qualites ON links.id = qualites.id_link
    LEFT JOIN languages ON links.id = languages.id_link
    LEFT JOIN streamings ON links.id = streamings.id_link
    LEFT JOIN users ON links.id_user = users.id
    LEFT JOIN hosters ON links.id_hoster = hosters.id
    GROUP BY qualite, language, movies.id, id_user
    ORDER BY id DESC LIMIT 3
    


    Si des personnes savent comment optimiser ce genre de requête lorsque l'on dispose de beaucoup de données :)
    Merci à vous !
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2011 à 0:12:18

      cela ne diminuera peut etre pas le temp d'exécution mais pour info ligne 10 "language" est un mot réservé en sql.

      Pour racourcir tes jointures il serait intéressant de connaitre le schema relationnnel de ta db.

      Enfin est tu sur que le long temp d'execution est liée a ta requete ? ou a ton script php ou ton serveur?

      teste ta requete dans phpmyadmin pour avoir son temp d'exécution effectif
      • Partager sur Facebook
      • Partager sur Twitter
      "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
        28 novembre 2011 à 11:45:28

        Tu as des clés primaires et/ou étrangères sur tes colonnes id ??
        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2011 à 14:52:35

          Il faudrait savoir combien de fois chaque jointure multiplie le nombre de lignes de résultat qui passent ensuite dans le group by...

          On dirait une grosse requête à tout faire, avec un GROUP BY foireux, chose qui fonctionne rarement, mais impossible d'en dire plus sans avoir plus d'infos. Et avec les noms des colonnes en bordel, impossible de deviner.
          Tu pourrais toujours essayer de mettre le LIMIT ailleurs :
          SELECT uploads.id, name, image_small, description, SUM( download ) download, uploads.view, hoster, id_user, login, qualite, language, SUM( size ) size, streaming, links.date
          FROM (SELECT * FROM movies ORDER BY id DESC LIMIT 3) movies
          LEFT JOIN uploads ON movies.id_upload = uploads.id
          LEFT JOIN links ON uploads.id = links.id_upload
          LEFT JOIN qualites ON links.id = qualites.id_link
          LEFT JOIN languages ON links.id = languages.id_link
          LEFT JOIN streamings ON links.id = streamings.id_link
          LEFT JOIN users ON links.id_user = users.id
          LEFT JOIN hosters ON links.id_hoster = hosters.id
          GROUP BY qualite, language, movies.id, id_user
          ORDER BY id DESC
          

          • Partager sur Facebook
          • Partager sur Twitter

          Optimisation requête sql

          × 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