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 :

optimisation de temps d'execution de requête


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut optimisation de temps d'execution de requête
    Bonjour,
    je travaille sous Oracle 9i,je souhaite executer la requ^te suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select distinct q3.LIBABR,r3.REPONSE,NULL,NULL,NULL,NULL
    from PENSOINS.BM_LIB_S lib2,
    PENSOINS.C_QUESTION q3,PENSOINS.BM_REP_S r3
    where lib2.PARENTE like '674,%'
    and lib2.NIQ = q3.NIQ
    and lib2.NILIB = r3.NILIB
    and lib2.NIQSUP is NULL
    and lib2.NILIBSUP is NULL
    and q3.NIQ not in (select lib1.NIQSUP from PENSOINS.BM_LIB_S lib1 where lib1.PARENTE like '674,%')
    and r3.NILIB not in (select lib1.NILIBSUP from PENSOINS.BM_LIB_S lib1 where lib1.PARENTE like '674,%')
    le problème c'est qu'elle met trop de temp pour s'executer, je suis sûr qu'elle peut être optimiser, et c'est pour cette raison je demande votre aide

    voici la structure des tables et champs concernés par cette requête:
    C_QQUESTION (NIQ,LIBABR)
    BM_REP_S (NIR,REPONSE,NILIB)
    BM_LIB_S (NILIB,NIQ,NIQSUP,NIRSUP,PARENTE)


    je vous remercie d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    Utiliser NOT exists au lieu de NOT IN, ca va aider bcp dans l'optimisation de temps d'execution.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    merci de m'avoir répondu, je vais essayer ça de près

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    le fait de remplecer par not IN par NOT exists m'a généré l'erreure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error Code: 920, SQL State: 42000]  ORA-00920: invalid relational operator

  5. #5
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and q3.NIQ not in (select lib1.NIQSUP from PENSOINS.BM_LIB_S lib1 where lib1.PARENTE
    par


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and not exists (select 1  from PENSOINS.BM_LIB_S lib1 where lib1.PARENTE like '674,%' and q3.NIQ=lib1.NIQSUP )
    et l'autre NOT IN de la meme façon.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    wéé, ça marche très bien cette fois, je te remercie encore.
    peux tu me conseiller quelque chose pour que je deviens comme toi

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ben oui, la syntaxe de NOT EXISTS attend une sous requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT DISTINCT Q3.Libabr,R3.Reponse,NULL,NULL,NULL,NULL
    FROM 	PENSOINS.BM_LIB_S 	Lib2,
    	PENSOINS.C_QUESTION Q3,
    	PENSOINS.BM_REP_S 	R3
    WHERE Lib2.Parente LIKE '674,%'
    AND Lib2.Niq = Q3.Niq
    AND Lib2.Nilib = R3.Nilib
    AND Lib2.Niqsup IS NULL
    AND Lib2.Nilibsup IS NULL
    AND NOT EXISTS (SELECT 1 
    		FROM PENSOINS.BM_LIB_S Lib1 
    		WHERE Lib1.Parente LIKE '674,%' 
    		AND ( Lib2.Niq = Lib1.Niqsup OR Lib2.Nilib = Lib1.Nilibsup)
    		)
    J'ai regroupé les 2 dernières requetes pour limiter les accès.
    Ca devrait aller plus vite, mais un DISTINCT + 2 LIKE, c'est pas le top pour la vitesse, mais tu peux peut être pas faire autrement.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    merci encore, c'est parfait

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

Discussions similaires

  1. [AC-97] Optimiser une requête pour diminuer le temps d'execution
    Par Milyshyn76 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 31/05/2010, 12h22
  2. Réponses: 10
    Dernier message: 09/02/2010, 20h08
  3. temps d'execution entre requète DB et affichage
    Par baboutom dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 27/05/2009, 00h27
  4. Réponses: 6
    Dernier message: 11/03/2009, 11h26
  5. Optimisation du temps d'execution en C
    Par xinu666 dans le forum SQLite
    Réponses: 4
    Dernier message: 02/05/2008, 09h54

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