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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    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 Expert 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
    Par défaut
    Bonjour,

    il faudrait peut etre envoyer votre requete ....

    faites explain plan

    qu'est ce que ca donne

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

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    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
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

  5. #5
    Expert confirmé
    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
    Par défaut
    Ou en utilisant finement une jointure externe.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    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...

  7. #7
    Membre Expert 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
    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)

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    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.

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    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 !

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