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 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 requête
    Bonjour,

    voici les tables et les champs dont j'ai besoin pour ma requête:
    C_QUESTION (NIQ,LIBABR,..) (table de questions)
    BM_REP_S (NIR,REPONSE,NILIB,..) (table de reponses)
    BM_LIB_S (NILIB,NIQ,NIQSUP,NILIBSUP,PARENTE,...) (table de correspondance entre les question-reponse et leur questions mère)
    PENSOINS.BM_TH_S (NITH,NIPATIENT,NISEJOUR,..)
    PENSOINS.SEJOUR (NISEJOUR,NIPATIENT,..)
    PENSOINS.PATIENT (NIPATIENT,NIP,NOM,PRENOM,...)

    j'ai fais une requête qui marche très bien. mais je pense qu'elle peux être optmisée, et c'est pour cette raison que je demande votre aide

    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 p.NIP, p.NOM, p.PRENOM,r4.REPONSE as "date examen",r5.REPONSE as "Heure examen",q3.LIBABR,r3.REPONSE
    from PENSOINS.BM_LIB_S lib3,
    PENSOINS.BM_LIB_S lib4,
    PENSOINS.BM_LIB_S lib5,
    PENSOINS.C_QUESTION q3,
    PENSOINS.BM_REP_S r3,
    PENSOINS.C_QUESTION q4,
    PENSOINS.BM_REP_S r4,
    PENSOINS.C_QUESTION q5,
    PENSOINS.BM_REP_S r5,
    PENSOINS.BM_TH_S th3,
    PENSOINS.SEJOUR sj, 
    PENSOINS.PATIENT p
    where lib3.PARENTE like '674,%'
    and lib3.NIQ = q3.NIQ 
    and lib3.NILIB = r3.NILIB
    and lib3.NIQSUP is NULL
    and lib3.NILIBSUP is NULL
    and lib3.NITH = th3.NITH
    and lib4.NIQ = q4.NIQ 
    and lib4.NILIB = r4.NILIB
    and q4.LIBABR like 'Date de l%'
    and lib5.NIQ = q5.NIQ 
    and lib5.NILIB = r5.NILIB
    and q5.LIBABR like 'Heure de l%'
    and lib3.NITH = lib5.NITH
    and lib3.NITH = lib4.NITH
    and sj.NISEJOUR = th3.NISEJOUR
    and p.NIPATIENT = sj.NIPATIENT
    and not exists (select lib1.NIQSUP from PENSOINS.BM_LIB_S lib1 where lib1.PARENTE like '674,%' and lib3.NIQ = Lib1.NIQSUP)
    order by 2,4,5,6
    je vous remercie d'avance

  2. #2
    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
    c'est pas la même requête qu'ici : http://www.developpez.net/forums/sho...d.php?t=364600 ?

    Sinon, même réponse : sans le plan d'exécution nous ne pourrons pas t'aider... tu ne donnes même pas le modèle de données avec les indexes... c'est à une voyante que tu devrais t'adresser

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Pourquoi veux tu l'optimiser?
    Elle prend trop de temps?

    Sinon je te conseille de te documenter sur l' EXPLAIN PLAN, cela devrait te permettre de vérifier si ta requete utilise les bons index.
    Dyvim

  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
    Merci de m'avoir répondu.

    Non contrairement à la requête precedente.
    j'ai éviter de faire des requêtes imbriquées parce que ça prenait beaucoup de temps, le temps d'execution me parait résonable cette fois,
    c'est plutôt l'érgonomie de la requête que je souhaite changer.

    je vous remercie encore.

  5. #5
    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
    Optimiser une requete sans connaitre la volumétrie, les indexes, etc.. c'est au petit bonheur la chance (sauf mauvaise écriture de requete)

    un petit truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and not exists (select lib1.NIQSUP
    a remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and not exists (select 1
    Dans ton cas tu obliges oracle à aller récupérer la valeur de la colonne. Si ça se trouve il n'a même pas besoin d'aller lire les données de la table. Il peut se contenter de ne lire que l'index.
    Donc avec EXISTS : ne jamais renvoyer une colonne mais une constante dans le sous select .
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  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
    d'accord, merci beaucoup
    je vais voir ça de prés

  7. #7
    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
    ça marche, merci
    et si vous voyez autre chose à changer n'hésitez pas surtout

    merci encore

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

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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