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 :

Quel(s) Index créé(s) pour optimiser mon DELETE ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut Quel(s) Index créé(s) pour optimiser mon DELETE ?
    Bonjour à tous !

    Malgré mes nombreux tests, je ne vois pas comment optimiser ma requête ... pourtant je suis sûr que cela est possible ... de toute façon j'ai pas le choix !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE FROM mesArticles 
    WHERE extract(year FROM date_creation) < 2006 
    AND ( code_article || ',' || code_dossier ) NOT IN (    
    SELECT DISTINCT ( code_article || ',' || code_dossier ) FROM mesVentes 
    )
    Mes Index :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX Idx_mesVentes_2 ON mesVentes (code_article || ',' || code_dossier);
    CREATE INDEX Idx_mesArticles_2 ON mesArticles (extract(year FROM date_creation)); commit;

    Avec Index, coût total = 82.897.768 !!!

    Gôm

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Delete From mesArticles a
    Where date_creation < To_Date('01/01/2006','DD/MM/YYYY') 
    And Not Exists ( Select Null
                       From mesVentes v
                      Where v.code_article = a.cod_article
                        And v.code_dossier = a.code_dossier
    )
    /
    Avec un index sur mesVentes(code_article, code_dossier);

    Et expliquez nous un peu plus sur ce que vous faite: volumétrie, régularité, etc.

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Merci !!!

    Au final, voici ma requête DELETE et les INDEX qui vont avec !

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    -- L'année, 2006, est passée en paramètre dans mon programme JAVA d'où est lancée cette requête SQL de purge de mes articles
    DELETE FROM mesArticles art
    WHERE extract(year FROM art.date_creation) < 2006
    AND NOT EXISTS ( SELECT NULL
                       FROM mesVentes vte
                      WHERE vte.code_article = art.code_article
                        AND vte.code_dossier = art.code_dossier
    )

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX Idx_mesArticles_2 ON mesArticles (extract(year FROM date_creation));
    CREATE INDEX Idx_mesVentes_2 ON mesVentes (code_article, code_dossier);


    Gôm

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Si vous en avez vraiment besoin mettez un index sur date_creation à la place (extract(year FROM date_creation)) et modifiez la requête.

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

Discussions similaires

  1. demande de conseil pour optimiser mon script
    Par seb.garcia dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 11/05/2011, 16h03
  2. PreparedStatment : conseils pour optimiser mon code
    Par Monkey_D.Luffy dans le forum JDBC
    Réponses: 8
    Dernier message: 30/05/2008, 13h49
  3. Y a-t-il une solution pour optimiser mon petit code ?
    Par pierre987321 dans le forum Delphi
    Réponses: 20
    Dernier message: 14/06/2007, 10h53
  4. Requetes et Index pour optimisation...
    Par manuds dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/03/2006, 09h05
  5. Réponses: 4
    Dernier message: 26/01/2006, 10h35

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