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 :

Optimiser une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Optimiser une requête
    Bonjour mes amis;

    je souhaite optimiser ma requête en terme de temps de réponse, qui fait appel à plusieurs vues, voici le corps :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    ( SELECT A, B , C , D , E , F
    FROM VIEW_A
     
    UNION
     
    SELECT A, B , C , D , E , F
    FROM VIEW_B  )
     
    VIEW_A :
     
    WITH Abs_A( SELECT A, B , C , D , E , F
                                FROM TABLE_A ....................***
                                WHERE ...
                                AND 
                                AND ...),
    WITH Abs_B( SELECT A, B , C , D , E , F
                                FROM TABLE_B
                                WHERE ...
                                AND 
                                AND ...)
    SELECT A, B , C , D , E , F
    FROM Abs_A NATURAL JOIN Abs_B
    WHERE ...
    AND 
    AND ...
     
    ----
     
     
    VIEW_B :
     
    WITH Abs_A( SELECT A, B , C , D , E , F
                                FROM TABLE_A....................***
                                WHERE ...
                                AND 
                                AND ...),
    WITH Abs_B( SELECT A, B , C , D , E , F
                                FROM TABLE_C
                                WHERE ...
                                AND 
                                AND ...)
    SELECT A, B , C , D , E , F
    FROM Abs_A NATURAL JOIN Abs_B
    WHERE ...
    AND 
    AND ...

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 221
    Par défaut
    Il y a certainement plein de choses à faire, mais tu en demandes beaucoup, en donnant trop peu d'éléments.

    J'ai consulté ma boule de cristal, et voici ce qu'elle m'a dit :

    Tu as View_a définie ainsi :
    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
    WITH Abs_A( SELECT A, B , C  
                                FROM TABLE_A ....................***
                                WHERE ...
                                AND 
                                AND ...),
    WITH Abs_B( SELECT A, B , C 
                                FROM TABLE_B
                                WHERE ...
                                AND 
                                AND ...)
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
    SELECT A, B , C  
    FROM Abs_A NATURAL JOIN Abs_B
    WHERE ...
    AND AND ...
    Tu fais select A, B, C, D from Abs_A NATURAL JOIN Abs_B , mais il y a des colonnes A B C et D dans Abs_A, et aussi dans Abs_B.
    Je suppose qu'en fait, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Abs_a.A, Abs_a.B , Abs_a.C 
    FROM Abs_A NATURAL JOIN Abs_B
    WHERE ...
    En d'autres mots, je suppose que toutes les colonnes de View_A viennent de Table_A. Et idem, je supose que toutes les colonnes de View_B viennent de Table_A.

    Si c'est effectivement le cas, ta requête complète , tu peux l'organiser ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table_A where (A,B,C) in (... ...)
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from table_A X 
          where  
          (X.B = ... and exists ( select 1 from table_B ... ... )) 
      or ( X.C= ... and exists ( select 1 from table_c ... ... ))
    Si le diagnostic est bon, les question qui suivent, c'est : quels sont les volumes approximatifs des 3 tables, quels sont les indexes ?

    Si pas d'index utilisable sur Table_B et table_C, la syntaxe avec Exists sera lente, et j'essaierais la syntaxe avec In. Mais s'il y a des indexes utilisables, la syntaxe avec Exists() est la mieux.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Merci pour retour mais,

    en grosso-modo moi je cherche les lignes qui sont sur TABLE_B ou TABLE_C
    avec A,B,C,D,E Dans TABLE_A
    ET TABLE_C.F < TABLE_A.F ou TABLE_B.F < TABLE_A.F

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Additivement, je veux afficher le champs "O" qui existedans TABLE_C et TABLE_C et qui n'existe as dans TABLE_A

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 221
    Par défaut
    Regarde cette discussion : https://www.developpez.net/forums/d1.../#post10525189

    Tu avais posé une question très proche, et tu avais eu la réponse.
    Ici, tu dis que grosso-modo, tu veux la même chose. Donc grosso-modo, la réponse est la même.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Merci tbc92

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

Discussions similaires

  1. Optimiser une requête de "classement"
    Par Manu0086 dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/03/2006, 18h47
  2. besoin d'aide pour optimiser une requête
    Par jisse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2006, 09h41
  3. Optimiser une requête..est-ce possible ?
    Par Thierry8 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2005, 11h31
  4. 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

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