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

PL/SQL Oracle Discussion :

Pb performance NOT IN


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut Pb performance NOT IN
    Bonjour,

    J'ai un problème de performance dans une requête utilisant le not in, y aurait-il un moyen de contourner cela ?

    En gros voilà ce dont j'ai besoin : projets n'ayant pas émis de demandes depuis + de 6 mois.

    Ce que je faisais :
    Select tous les projets
    NOT IN Select des projets ayant créés des tickets ses 6 derniers mois

    J'utilise l'outil IBM ClearQuest proposant un SQL Editor. Enfait du moment que la requête est trop lourde le programme se met carrément à planter (NOT RESPONDING) et on est obligé de le fermer brutalement... oui c'est clair c'est pas le top mais j'ai ça .

    Pour info cet éditeur ne me permet de faire que du Select...

    Une solution ?

    Merci

  2. #2
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    il faudrait peut etre envoyer votre requete ....

    faites explain plan

    qu'est ce que ca donne

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  3. #3
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    A vu de nez, sans requête et descriptif de table, je dirais :
    select projet where date_ticket < 6 mois
    avec un index et un histogramme sur date_ticket

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Tu peux aussi essayer de remplacer NOT IN par NOT EXISTS avec les indexes ad hoc

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ou en utilisant finement une jointure externe.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    A vu de nez, sans requête et descriptif de table, je dirais :
    select projet where date_ticket < 6 mois
    avec un index et un histogramme sur date_ticket
    s'il y a une date ticket c'est que le projet a créé un ticket...donc ça ne me va pas.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Voilà le code de ma requê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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    SELECT DISTINCT 
      T3.name as business_line, 
      T1.project_name as projet 
    FROM
      incident T1, 
      business_line T3, 
      parent_child_links T3mm, 
      project T2
    WHERE 
      T1.dbid <> 0 
      AND T1.business_line <> 0  
      AND T1.submit_date is not NULL
      AND T1.project_name = T2.name 
      AND T2.dbid = T3mm.child_dbid  (+) 
      AND 16778549 = T3mm.child_fielddef_id  (+) 
      AND T3mm.parent_dbid = T3.dbid  (+) 
      AND T1.project_name not in (
                                                        SELECT
                                                           T4.name 
                                                       FROM
                                                           incident T5, 
                                                           project T4 
                                                        WHERE 
                                                           T4.name = T5.project_name 
                                                           AND T5.dbid <>0 
                                                           AND T4.dbid <> 0 
                                                           AND T5.submit_date < {ts '2008-07-01 00:00:01' }
                                                      ) 
    ORDER BY T3.name

    Merci !

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Tu peux aussi essayer de remplacer NOT IN par NOT EXISTS avec les indexes ad hoc
    Bonjour,

    Je suis désolée mais je ne sais pas ceux que sont les index ad hoc ? Je vais voir comment les récupérer alors...

  9. #9
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    OK,

    les index se creent ,se visualisent, se font supprimer , mais ne se recuperent pas

    Alors ...

    PRIMO. regarder le doc officielle Oracle
    tahiti.oracle.com

    http://download.oracle.com/docs/cd/B...htm#SQLRF01209

    DEUXIO
    Ici il y a une petite discussion sur Index en Oracle

    http://www.developpez.net/forums/d12...x-sous-oracle/

    TERTIO

    Voir la doc sur initiation a l'optimisation

    http://jpg.developpez.com/oracle/tuning/

    A la fin, vous devez avoir des elements pour des debuts de reponses

    pour comparer par exemple NOT IN et NOT EXISTS (solution présentée au dessus)

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Et il faut aussi ne pas oublier de croiser vos doigts.
    Bref, il y a une jointure des tables incident et projet dans la requête principale et encore la même dans la sous-requête pour tester submit_date (avec quelque chose que je dois avouer que je ne sait pas que est-ce que c'est: {ts ...}).
    Peut être que vous pouvez remonter les restrictions de la sous-requête dans la requête principale.

Discussions similaires

  1. User does not have permission to perform this action
    Par Im.Cresus dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/11/2010, 15h31
  2. Réponses: 1
    Dernier message: 03/08/2009, 17h26
  3. Réponses: 1
    Dernier message: 14/10/2008, 12h08
  4. Réponses: 10
    Dernier message: 14/12/2006, 12h53
  5. Réponses: 3
    Dernier message: 04/07/2006, 17h07

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