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

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    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 038
    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 038
    Points : 9 347
    Points
    9 347
    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.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    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 du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    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 038
    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 038
    Points : 9 347
    Points
    9 347
    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.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    Par défaut
    Merci tbc92

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Déjà virer le NATURAL JOIN ....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ 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, 19h47
  2. besoin d'aide pour optimiser une requête
    Par jisse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2006, 10h41
  3. Optimiser une requête..est-ce possible ?
    Par Thierry8 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2005, 12h31
  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, 21h55

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