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

Langage SQL Discussion :

Optimisation d'une requête patchwork


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Points : 28
    Points
    28
    Par défaut Optimisation d'une requête patchwork
    Bonjour à tous.

    On m'a récemment conseillé d'utiliser des JOIN pour les requêtes de mon forum, hors ne connaissant que moyennement le sujet je suis confronté à un problème; ma requête est affreusement lente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT _f_forums.ID, _f_forums.description, _f_forums.nom, 
    _f_topics.ID AS tID, _f_topics.posteur, _f_topics.sujet, _f_topics.date, _f_posts.ID AS pID, _f_posts.posteur AS pposteur, _f_posts.sujet AS psujet, _f_posts.date AS pdate, _f_posts.time, 
    COUNT( DISTINCT (ctopic.ID)) AS nbt, COUNT(cposts.ID) AS nbp
    FROM _f_forums
    LEFT JOIN _f_topics ON _f_forums.lasttopic = _f_topics.ID
    LEFT JOIN _f_posts ON _f_topics.lastpost = _f_posts.ID
    LEFT JOIN _f_topics AS ctopic ON ctopic.relatif = _f_forums.ID
    LEFT JOIN _f_posts AS cposts ON cposts.relatif = ctopic.ID
    WHERE _f_forums.description <> 'alliance'
    AND _f_forums.rang <= '5'
    GROUP BY _f_forums.ID
    ORDER BY _f_forums.ID ASC
    J'explique.
    J'ai une table _f_forums à laquelle correspondent de multiples entrées de _f_topics, je veux le dernier topic de chaque forum (_f_forums.lasttopic = _f_topics.ID)
    Ensuite pour chaqun de ces topics j'aimerais que le dernier enregistrement correspondant dans _f_posts soit sélectionné (_f_topics.lastpost = _f_posts.ID)
    Enfin pour chaque forum il me faut le nombre de topics qu'il contient (nbt) et le nombre de posts dans tous ces topics (nbp)

    Donc
    forum <= topic <= post
    mais également
    forum <= compte des topics <= compte des posts.

    Je suppose qu'il doit y avoir quelquechose de tres mal conçu dans ma requête vu qu'elle prend actuellement 3,5s à s'executer (et il n'y a que 6 forums, 200 topics et 2500 posts...

    J'espère que vous pourrez m'aider car je patauge dans la semoule

    Merci à ceux qui se pencheront sur mon cas
    Alors je signe ici...
    sccccrchttttrrrchhhh

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 839
    Points : 52 932
    Points
    52 932
    Billets dans le blog
    5
    Par défaut
    c'est normal vous faites des OUTER join couronnés par des COUNT DISTINCT suivants divers colonnes.

    De plus votre clause GROUP BY est incorrecte. Il y manque la plupart des colonnes.
    Il est d'ailleurs étonnant que votre SGBDR n'ait pas vu cette anomalie syntaxique car votre requête n'a aucun sens.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Optimisation d'une requête de recherche
    Par Bobtop dans le forum Requêtes
    Réponses: 16
    Dernier message: 14/06/2006, 16h27
  2. Optimisation d'une requête
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/12/2005, 18h21
  3. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  4. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  5. [DB2] Optimisation d'une requête
    Par ahoyeau dans le forum DB2
    Réponses: 7
    Dernier message: 11/03/2005, 17h54

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