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

PL/SQL Oracle Discussion :

Optimisation d'une requete


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut Optimisation d'une requete
    j'ai une requete qui resemble à :
    INSERT INTO table1 T1 select * from table2 T2 where T2.id_t in (select T2.id_t from table1),

    sauf que le requete en rouge(2éme select) me renvoi une dizaine de millions de lignes, ce qui bloque le insert,
    est ce qu'il y a une facon pour optimiser cette requete(ne pas utiliser le IN par exemple )

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Par défaut
    Bonjour,
    Dans ta requête example tu insert dans une table destination les données d'une table source dont les enregistrements sont équivalent à la table destination.


    Arrives-tu à nous donner en peu plus d'info sur la requête que tu veux monté. Car là je vois des problèmes d'intégrité.

    L'on arrivera mieux à t'aider et te donner une solution appropriée.

    Cala

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    OK,
    bref je voulais faire une copie de ma BD dans une autre en filtrant sur des critéres

    je vous réécrit la requête :

    INSERT INTO DB_DATA SELECT * FROM DB_DATA_SR WHERE ID_DATA_LIE IN (SELECT DISTINCT ID_DATA FROM DB_DATA).

    mon prbléme c'est que le teste WHERE ID_DATA_LIE IN ... prend beaucou^p de temps puisque le sous requete SELECT DISTINCT ID_DATA FROM DB_DATA me renvoi des millions de lignes, du coup j'attend presque des heurs pour affiché le resultat,

    je pense de faire un merge into mais je ne sais pas est ce que ça va marcher ou non

  4. #4
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Par défaut
    Depuis la version 10g Oracle a introduit la fonction Datadump pour l'export/import. Il peut être utilisé pour le transfert de donnée. Ce qui est intéressant est que l'on peux le programmée dans des jobs, exporter seulement de structure ou des données, et bien d'autre fonction.

    Etant donné que ta table comporte des million d'enregistrement cet outils améliora fortement tes performances.

    Regarde vite ce tutoriel intéressant : http://jaouad.developpez.com/datapump/

    ayant compris que tu désire transférer d'un Base à une autre, Ceci devrait te convenir et en plus on peut l'inclure dans du code sql grâce au package dbms_datadump.

    Cala

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 44
    Par défaut
    Bonsoir,


    Essayez donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    INSERT INTO DB_DATA 
      SELECT * 
        FROM DB_DATA_SR dds
      WHERE exists (SELECT 1 
                            FROM DB_DATA dd
                            WHERE dds.ID_DATA_LIE = dd.ID_DATA
                           )
    Qui a deux avantages :

    1. La clause EXISTS et souvent plus efficace qu'un IN
    2. Pas besoin du DISTINCT, c'est à dire du tri sur plusieurs millions de lignes


    Cdlt,
    OD

Discussions similaires

  1. Optimisation d'une requete "TOP 5"
    Par gregb34 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/05/2006, 17h17
  2. Réponses: 5
    Dernier message: 14/04/2006, 18h58
  3. Optimisation d'une requete récurrente
    Par winzou dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/01/2006, 22h07
  4. Optimisation d'une requete specifique
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/12/2005, 14h14
  5. optimisation d'une requete de recherche
    Par moog dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 06/04/2005, 16h58

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