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

Langage SQL Discussion :

Optimiser Une requête AQL Oracle de DELETE


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut Optimiser Une requête AQL Oracle de DELETE
    Bonjour,

    Par soucis d'optimisation (la fonction WHERE EXISTS étant trop couteuse), comment modifier la requête suivante en retirant la clause "WHERE EXISTS" de la sous requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    DELETE from T_table1
    where date_crea >= (select min(date_crea)
                           from T_Work_table1
                        )
       OR ID_OPE in (select ID_OPE
                            from T_Work_table1 t
                                   WHERE EXISTS (select 1 from T_table1 td
                                                      where td.ID_OPE= t.ID_OPE)
                         );
    En vous remerciant par avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Avez vous analysé le plan d'exécution pour affirmer que c'est la requête EXISTS qui est coûteuse ?
    EXISTS est au contraire le plus souvent performant, sous réserve bien sur que les critères de restriction et/ou de jointure soient SArgAble

    Quel est le volume approximatif des tables ?
    Quelle est la durée d'exécution de la requête ?
    Est-ce que ID_OPE est indexé dans ces deux tables ? Si oui, avez vous vérifié que cette colonne est la première dans l'un des index ?
    Combien y a -t- il de valeurs distinctes de ID_OPE dans T_Work_table1 et T_table1 ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    Il faudrait également connaître les index des deux tables.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    En soi, le exists de la deuxième sous-requête est redondant.
    Ceci devrait amener au même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    delete  from T_table1    tb1
    where   exists  (   select  null
                        from    T_Work_table1   wrk
                        having  tbl.date_crea   >= min(wrk.date_crea)
                            )
        or  exists  (   select  null
                        from    T_Work_table1   wrk
                        where   tbl.id_ope  = tb1.id_ope
                    )
    ;
    La mise en place d'index sur ID_OPE est une excellente piste d'optimisation.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    Merci à Tous pour votre aide.

    Index mis sur ID_OPE et code réécrit selon l'exemple de al1_24.


    Merci encore !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/08/2014, 18h07
  2. Réponses: 4
    Dernier message: 27/08/2009, 10h38
  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