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 :

Comparaison entre deux énormes tables


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut Comparaison entre deux énormes tables
    Bonjour,

    Concernant le SGB utilisé: Oracle 10G
    La problématiques est la suivante, j'ai deux tables une donnees et l'autre historique.
    A l'aide d'une application les enregistrement de donnees sont consommées et inscrit dans la table historique.
    Cependant il s'avère que des enregistrements n'est pas étés soient traitées soit reportés dans la table historique.

    Pour mener à bien mes investigations, j'ai pensé a cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select col_indexe_unique
    from donnees
    MINUS
    select col_indexe_unique 
    from historique;
    où col_indexe_unique est une données unique identique aux deux tables.

    Le souci est que les deux tables sont vraiment énormes et que la requête consomment réellement trop de ressources.

    Auriez-vous des idées pour l'améliorer ou une autre solution.

    Cordialement,

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Qu'est ce que ça donne avec NOT EXISTS ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT col_indexe_unique
      FROM donnees d
     where not exists (SELECT 1
                         FROM historique h
                        where h.col_indexe_unique = d.col_indexe_unique

  3. #3
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    En général oui, en particulier ... ben en fait non.

    Tout dépend du fait de savoir si oui ou non col_indexe_unique est une PK (c'est à dire que la colonne est forcément valuée) ou non.

    Si c'est une PK, le MINUS sur les index PK sera plus rapide, dans le cas contraire c'est la seconde requête qui est plus rapide mais elle n'est pas équivalente à la première

    en effet, si les deux tables contiennent une valeur (ou des valeurs nulles) sur la colonne indexée unique, l'une des deux requêtes (not in) reverra plus de lignes que l'autre (minus)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut
    Alors je précise que col_indexe_unique n'est pas une primary key, mais que le champs est indexé et forcément valué (positionné à not null).

    @skuatamad je test

    Pour le moment j'ai choisi l'option suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT MIN(TableName) as TableName, ID
    FROM
    (
      SELECT 'Donnees' as TableName, col_indexe_unique as ID
      FROM donnees
      UNION ALL
      SELECT 'Historique' as TableName, col_indexe_unique as ID
      FROM historique
    ) tmp
    GROUP BY ID
    HAVING COUNT(*) = 1
    ORDER BY ID;
    Mais le temps d’exécution est énorme

  5. #5
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Pouvez vous comparer les plans d'exécution ?

    Il devrait faire pour votre première solution un MINUS entre les INDEX FAST FULL SCAN des deux tables et ça devrait performant. Sinon il lui manque une info

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut
    Effectivement, j'ai deux appel index fast full scan pour la requête avec minus...

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

Discussions similaires

  1. SQL2000 comparaison entre deux tables
    Par troika dans le forum Développement
    Réponses: 1
    Dernier message: 16/08/2009, 18h38
  2. comparaison entre deux tables
    Par mdh12 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/11/2008, 15h57
  3. Comparaison entre deux tables
    Par Bes74 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/08/2007, 20h04
  4. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

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