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

SQL Oracle Discussion :

Tuning Sql & jointure


Sujet :

SQL Oracle

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut Tuning Sql & jointure
    Bonjour,

    j'ai un problème avec une jointure sur une table avec PK.

    J'ai la requête suivante qui renvoie 100 resultats en 562ms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH MYDATA_LVL1_N0 as ( <select> )
     SELECT PRIX,IDFICHEANNONCEUR,AA.IDFICHEPASSAGE1,AA.IDFICHEPASSAGE2,RN,RN_H FROM MYDATA_LVL2_N0 AA
    Sans changer le contenu du "with" , j'ajoute une jointure sur une table AW3_FICHEPASSAGE, contenant 19 millions de rows, sur une PK:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH MYDATA_LVL1_N0 as ( <select> )
     SELECT PRIX,IDFICHEANNONCEUR,AA.IDFICHEPASSAGE1,AA.IDFICHEPASSAGE2,RN,RN_H,L0.POSITIONSPOT FROM MYDATA_LVL2_N0 AA  
                                                                         LEFT JOIN AW3_FICHEPASSAGE L0 ON L0.IDFICHEPASSAGE = AA.IDFICHEPASSAGE1
    La requête dure 25secondes... j'ai l'impression que la PK de AW3_FICHEPASSAGE n'est pas prise en compte.
    D'ailleurs si je fait un explain, il me met un <<Node Cost>> à 37448 sur un <<obj name>> AW3_FICHEPASSAGE ( si join copie d'écran )

    Voici la requête complète :


    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
    20
    21
     WITH MYDATA_LVL1_N0 as ( SELECT IDFICHEANNONCEUR,AA.IDFICHEPASSAGE1,AA.IDFICHEPASSAGE2,sum(PRIX) as PRIX
    											FROM (SELECT IDFICHEANNONCEUR,AA.IDFICHEPASSAGE as IDFICHEPASSAGE1,AA.IDFICHEPASSAGE as IDFICHEPASSAGE2,sum(PRIX) as PRIX
    								FROM AW3_AGG_3_2010_3  AA
    									 WHERE (AA.IDCLASSEMEDIA in ( 3,142) ) AND  ( DATEACTIVITE between to_date('2010-04-01 00:00:00','YYYY-MM-DD HH24:MI:SS') AND to_date('2010-04-30 23:59:59','YYYY-MM-DD HH24:MI:SS') ) 
    									GROUP BY IDFICHEANNONCEUR,AA.IDFICHEPASSAGE
     UNION ALL 
    SELECT IDFICHEANNONCEUR,AA.IDFICHEPASSAGE as IDFICHEPASSAGE1,AA.IDFICHEPASSAGE as IDFICHEPASSAGE2,sum(PRIX) as PRIX
    								FROM AW3_AGG_3_2010_142  AA
    									 WHERE (AA.IDCLASSEMEDIA in ( 3,142) ) AND  ( DATEACTIVITE between to_date('2010-04-01 00:00:00','YYYY-MM-DD HH24:MI:SS') AND to_date('2010-04-30 23:59:59','YYYY-MM-DD HH24:MI:SS') ) 
    									GROUP BY IDFICHEANNONCEUR,AA.IDFICHEPASSAGE) AA
    												GROUP BY IDFICHEANNONCEUR,AA.IDFICHEPASSAGE1,AA.IDFICHEPASSAGE2),
    MYDATA_LVL2_N0 as ( SELECt * FROM (
    											SELECT AA.*,
    													dense_rank() OVER(ORDER BY PART_SCORE DESC,IDFICHEPASSAGE1,IDFICHEPASSAGE2) AS RN  ,
    													1 as RN_H
    													FROM ( SELECT AA.*, 0 as PART_SCORE FROM MYDATA_LVL1_N0 AA  ) AA
    											)
    										WHERE RN > 0 AND RN <= 100 AND RN_H <= 100 
    										)
     SELECT PRIX,IDFICHEANNONCEUR,AA.IDFICHEPASSAGE1,AA.IDFICHEPASSAGE2,RN,RN_H,L0.POSITIONSPOT FROM MYDATA_LVL2_N0 AA  
                                                                         LEFT JOIN AW3_FICHEPASSAGE L0 ON L0.IDFICHEPASSAGE = AA.IDFICHEPASSAGE1
    Pouvez-vous m'aider ?
    Merci !
    Stéphane
    Images attachées Images attachées  

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

Discussions similaires

  1. Tuning SQL - Jointure complète
    Par Socap dans le forum Développement
    Réponses: 6
    Dernier message: 09/02/2011, 14h01
  2. Oracle 9.2 : Tuning SQL
    Par davy.g dans le forum Oracle
    Réponses: 11
    Dernier message: 11/08/2006, 08h42
  3. [SQL Server] Jointure entre 2 tables et performances
    Par rmeuser dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/04/2006, 10h12
  4. [sql] (+) et jointure
    Par Kasanova75 dans le forum Oracle
    Réponses: 3
    Dernier message: 03/03/2006, 15h47
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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