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

 Oracle Discussion :

Code SQL optimisé ?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut Code SQL optimisé ?
    Bonjour à tous,

    J'ai deux tables.
    TABLE_1 avec 5.000.000 d'enregistrements
    TABLE_2 avec 1.000.000 d'enregistrements

    J'ai indexé la TABLE_2 en non unique sur NUMDOSSIE et j'utilise ce code sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from TABLE_1 where (NUMDOSSIE not in (select NUMDOSSIE from TABLE_2));
    Et ça prend un temps fou.
    J'ai l'impression qu'il fait 5.000.000*1.000.000 de traitements.

    Voyez-vous une meilleur requête à faire ?

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select count(1) 
    from TABLE_1 t1
         left join TABLE_2 t2 on t1.NUMDOSSIE = t2.NUMDOSSIE 
    where
        t2.NUMDOSSIE is null

  3. #3
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Je passe de 13s. par enregistrement à 33s.

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Et y a-t-il un index sur Table1(NUMDOSSIE) ?

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select count(1) from TABLE_1 t1
    where not exists ( select 1 from TABLE_2 t2 where t2.NUMDOSSIE =t1.NUMDOSSIE )

  6. #6
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Non, mais je pense qu'on n'en a pas besoin.

    Il faut dans tout les cas que je lise tout les enregistrements de la TABLE_1 dont le numdossie n'est pas dans TABLE_2.

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par rockley Voir le message
    Non, mais je pense qu'on n'en a pas besoin.

    Il faut dans tout les cas que je lise tout les enregistrements de la TABLE_1 dont le numdossie n'est pas dans TABLE_2.
    Salut,

    Essaie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH t AS
         (SELECT t1.numdossie
            FROM table_1 t1
          MINUS
          SELECT t2.numdossie
            FROM table_2 t2)
    SELECT COUNT (numdossie)
      FROM t

  8. #8
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par rockley Voir le message
    Non, mais je pense qu'on n'en a pas besoin.

    Il faut dans tout les cas que je lise tout les enregistrements de la TABLE_1 dont le numdossie n'est pas dans TABLE_2.
    Eh non. Déjà, si vous avez un index sur TABLE_1, vous pouvez éviter de passer par la table (forcément plus lourde), vu que tout ce que vous faites, c'est un count. Données plus légères à manipuler => gain de temps.

    Ensuite, Oracle va pouvoir faire un gentil hash join entre les index.
    Essayez !

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par rockley Voir le message
    Bonjour à tous,

    Et ça prend un temps fou.
    J'ai l'impression qu'il fait 5.000.000*1.000.000 de traitements.
    Lorsque votre requête est trop lente

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

Discussions similaires

  1. Création BD Access Code SQL pour relation 1-1 ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2005, 16h42
  2. Réponses: 7
    Dernier message: 12/09/2005, 11h05
  3. Lier du code C optimisé et du code ASM non optimisé
    Par garybaldi dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 07/09/2005, 16h22
  4. [IB6] Code SQL.
    Par qi130 dans le forum SQL
    Réponses: 1
    Dernier message: 21/02/2005, 12h21
  5. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

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