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 :

delete from


Sujet :

SQL Oracle

  1. #21
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2003
    Messages : 70
    Points : 50
    Points
    50
    Par défaut
    perso (et pour recentrer un peu le sujet) je viens d'essayer la solution proposée, et c'est franchement plus rapide ( à peu près dix fois plus),
    merci donc de votre aide.

  2. #22
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Laquelle ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #23
    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
    Citation Envoyé par SheikYerbouti
    Citation Envoyé par orafrance
    c'est pareil, tu m'aurais dit /*+ ORDERED */ là OK parce qu'il traite le EXISTS en premier :
    ??? tu veux dire que le hint USE_NL n'est pas pris en compte par l'optimiseur (il utilise toute de même le HASH JOIN) ?
    yep, le plan d'exécution est exactement le même, j'ai même essayé USE_NL(a,b) parce que j'avais un doute sur la syntaxe mais pas de différence... Si je force l'accés sur la PK de table_1 c'est pareil, c'est pas terrible

  4. #24
    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
    Citation Envoyé par SheikYerbouti
    Laquelle ?
    j'ai ma petite idée sur la réponse

  5. #25
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2003
    Messages : 70
    Points : 50
    Points
    50
    Par défaut
    celle utilisant EXISTS...

  6. #26
    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

  7. #27
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Il fallait bien que cela soit évident pour tout le monde
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #28
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2003
    Messages : 70
    Points : 50
    Points
    50
    Par défaut
    en fait ça marche bien , sauf que ça devrait ressembler à ça en fait ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Delete TABLE_1
    where exists
         (select TABLE_1.CLEF from TABLE_2 , TABLE_3
               where TABLE_2.CLEF = TABLE_3.CLEF
               and TABLE_1.CLEF = TABLE_2.CLEF)
    ou ou peut être...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Delete TABLE_1
    where exists
         (select TABLE_1.CLEF from TABLE_2 , TABLE_3
               where TABLE_2.CLEF = TABLE_3.CLEF
               and TABLE_1.CLEF = TABLE_2.CLEF
               and TABLE_1.CLEF = TABLE_3.CLEF)
    dans les deux cas ça prend et temps fou, et pour tout dire je ne suis pas que le résultat obtenu soit valable.

  9. #29
    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
    Le EXISTS est malheureusement trop souvent oublié

    Pourtant il remplace souvent avantageusement un IN... qu'on se le dise

  10. #30
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    La fonction EXISTS retourne un Boolean donc TRUE ou FALSE

    La syntaxe habituelle est du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select
    ....
    Where exists ( select 1 from ma_table where .... )
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  11. #31
    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
    oui... mais encore

  12. #32
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2003
    Messages : 70
    Points : 50
    Points
    50
    Par défaut
    en fait ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Delete TABLE_1 
    where exists 
         (select TABLE_1.CLEF from TABLE_2
               where TABLE_2.CLEF = TABLE_1.CLEF )
    and exists
               (select TABLE_1.CLEF from TABLE_3 
               where TABLE_3.CLEF = TABLE_1.CLEF)
    ça marche ... et en plus c'est pas mal rapide quand même

  13. #33
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Pourquoi si la clause exists est toujours plus rapide, la clause in existe-t-elle ?

    NB: Mes remarques sur les indexes avec clause in et clause exists étaient valables pour l'optimiser RBO. Et je peux vous garantir que sur des colonnes indexées, je préfère la clause in car il n'y a pas photo en matière de performance. Je ne connais pas bien l'optimiseur CBO.

    Je travaille sur un progiciel de compta, j'ai une table des mouvements qui peut contenir par exercice plusieurs millions de lignes et quand je fais des sous-requêtes je vérifie bien que je prends des colonnes indexées, sinon on peut passer à plusieurs heures de traitement...
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  14. #34
    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
    Le IN existe parce qu'il ne fait simplement pas la même chose que le exists et peut alors rendre de bons services

    Le RBO n'est plus maintenu par Oracle et commence donc à être sacrément obsoléte... faudrait quand même penser à passer au CBO

  15. #35
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Oui je sais que le RBO n'est plus maintenu, mais en progiciel, tu ne peux pas faire évoluer tous tes clients a la même vitesse, donc on est obligé d'être compatible avec tous... Mais on y viendra au CBO !

    Par contre paux-tu me donner un exemple de différence entre in et exists parce que je ne vois pas ce que tu peux faire avec in que tu ne peux pas faire avec exists ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  16. #36
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par PlaineR
    Pourquoi si la clause exists est toujours plus rapide, la clause in existe-t-elle ?
    n'était-ce pas votre question ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  17. #37
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ben, je ne vois pas dans quel cas cela influe différemment sur la reqête principale...

    Pouvez-vous me donner un exemple ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  18. #38
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Le résultat attendu n'est pas le même.

    EXISTS(), comme je le disais précedement retourne un BOOLEAN, donc aucune donnée réelle. cette fonction sert de test d'existence (d'ou son nom)

    IN retourne TOUTES les lignes

    L' avantage de EXISTS() est que la recherche s'arrête dès la première occurence trouvée et il n'est donc pas nécessaire de balayer l'ensemble de la table.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  19. #39
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Oui, je suis d'accord avec vous sur la différence technique entre exists et in, mais je ne vois pas la différence de conséquence sur la requête principale :
    - si j'ai les données suivantes dans col1 la table_1 : 0,1,0,1
    - si j'ai les données suivantes dans col2 la table_2 : 0,1,2,3

    que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select col1
    from table_1
    where exists (select null from table_2 where col_1 = col_2)
    ou que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select col1
    from table_1
    where col_1 in (select col_2 from table_2)
    la liste des valeurs ramenées sera la même...
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  20. #40
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    ...Humpf.......

    Alors traduisez la requête suivante avec la fonction EXISTS (sans utiliser IN)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from EMP where deptno IN ('10','20','30','50')
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Débutant] Problème avec DELETE FROM
    Par gouakkamol dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/11/2007, 09h19
  2. Différences entre delete table et delete from table
    Par pegase06 dans le forum Administration
    Réponses: 3
    Dernier message: 16/02/2007, 15h25
  3. Delete * From * Where ?!
    Par gui38 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/12/2006, 10h51
  4. Delete From In Select
    Par licorne dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/10/2006, 13h13
  5. DELETE FROM t where t.id IN (SELECT id FROM t....)
    Par davcha dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2006, 15h19

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