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

PostgreSQL Discussion :

Probleme de jointure externe ...


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Probleme de jointure externe ...
    Bonjour,

    Sauriez-vous pourquoi, postgresql se met a me faire un Right Join , alors que je lui ai demander de me faire un Left Join ?

    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
    EXPLAIN ANALYSE
    SELECT * FROM parametre_general     
    	LEFT JOIN (
            SELECT * FROM param_AGENT
            WHERE pspec_ref_id = 94
            ) AS pspec ON pgen_id = pspec_pgen_id
          	WHERE pgen_id = 94
     
    QUERY PLAN
    "Merge Right Join  (cost=0.00..7.19 rows=2 width=57) (actual time=0.452..0.476 rows=1 loops=1)"
    "  Merge Cond: (""outer"".pspec_pgen_id = ""inner"".pgen_id)"
    "  ->  Index Scan using index_agent on param_agent  (cost=0.00..3.19 rows=7 width=12) (actual time=0.196..0.229 rows=2 loops=1)"
    "        Index Cond: (pspec_ref_id = 94)"
    "  ->  Index Scan using pk_parametre_general on parametre_general  (cost=0.00..3.96 rows=2 width=45) (actual time=0.060..0.076 rows=1 loops=1)"
    "        Index Cond: (pgen_id = 94)"
    "Total runtime: 1.189 ms"
    Ce problème est d'autant plus surprenant que pour un id différent,
    j'ai le bon comportement ...

    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
    17
    18
    19
    EXPLAIN ANALYSE
            SELECT * FROM parametre_general     
    	LEFT OUTER JOIN (
            SELECT * FROM param_AGENT
            WHERE pspec_ref_id = 95
            ) AS pspec ON pspec_pgen_id = pgen_id
          	WHERE pgen_id = 94
     
     
    QUERY PLAN
    "Merge Left Join  (cost=3.29..7.30 rows=2 width=57) (actual time=0.724..0.761 rows=1 loops=1)"
    "  Merge Cond: (""outer"".pgen_id = ""inner"".pspec_pgen_id)"
    "  ->  Index Scan using pk_parametre_general on parametre_general  (cost=0.00..3.96 rows=2 width=45) (actual time=0.168..0.184 rows=1 loops=1)"
    "        Index Cond: (pgen_id = 94)"
    "  ->  Sort  (cost=3.29..3.31 rows=7 width=12) (actual time=0.392..0.405 rows=4 loops=1)"
    "        Sort Key: param_agent.pspec_pgen_id"
    "        ->  Index Scan using index_agent on param_agent  (cost=0.00..3.19 rows=7 width=12) (actual time=0.088..0.221 rows=7 loops=1)"
    "              Index Cond: (pspec_ref_id = 95)"
    "Total runtime: 1.487 ms"
    J'ai reindexé, fait un vacuum analyse de la table , sans changement ... :/

    Help ................

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je viens de rentrer de vacances, et j'espère que si personne à répondu a cette question , c'est que vous y êtiez aussi

    je tente donc un +1

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bon on dirait que les 3 semaines de vacances ont été bénéfiques :

    J'ai corrigé le problème de cette manière :

    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
    17
    18
     
    EXPLAIN ANALYSE
    SELECT * FROM parametre_general     
       LEFT JOIN (
            SELECT * FROM param_AGENT
            WHERE pspec_ref_id = 94
            AND pspec_pgen_id = 94
            ) AS pspec ON pgen_id = pspec_pgen_id
             WHERE pgen_id = 94
     
    QUERY PLAN
    "Nested Loop Left Join  (cost=0.00..10.40 rows=2 width=57) (actual time=0.507..0.572 rows=1 loops=1)"
    "  ->  Index Scan using pk_parametre_general on parametre_general  (cost=0.00..3.96 rows=2 width=45) (actual time=0.171..0.182 rows=1 loops=1)"
    "        Index Cond: (pgen_id = 94)"
    "  ->  Index Scan using index_agent on param_agent  (cost=0.00..3.21 rows=1 width=12) (actual time=0.253..0.294 rows=1 loops=1)"
    "        Index Cond: (pspec_ref_id = 94)"
    "        Filter: (pspec_pgen_id = 94)"
    "Total runtime: 1.236 ms"
    Je comprends pas pourquoi le fait de doubler la contrainte :
    "ON pgen_id = pspec_pgen_id" et "WHERE pgen_id = 94"
    et "AND pspec_pgen_id = 94

    fait que postgresql ne perd plus les pedales ...

  4. #4
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut
    Stp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme SQL jointure externe
    Par VlaMonPseudo dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/04/2010, 14h09
  2. Probleme de jointure externe !
    Par _Xavier_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/07/2009, 15h10
  3. probleme de jointure externe ?
    Par Julien59 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/05/2008, 17h00
  4. BO + SQL serveur : probleme de jointures externes
    Par bastoonet dans le forum Designer
    Réponses: 2
    Dernier message: 27/09/2006, 11h59
  5. [Oracle] Résoudre un problème de jointure externe
    Par nadass dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2006, 09h10

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