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 :

Optimisation de requete


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut Optimisation de requete
    Bonjour,

    j'ai un petit souci avec une requete sql. Je travail avec oracle 8i.

    Mon probleme est au niveau de la taille de mes tables, je fais une rquete de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    select att1, att2, att3,................
    from
    (   select ............
        from table1, table2
        where .......
        and .....
    ) a, 
    (   select attx, max(date) as madate
        from table3, table4
        where.......
        and .....
        group by attx) b
    where a.cle = b.cle
    order by ..........
    table1 : 27 000 000 de lignes
    table2 : 180 000 000 de lignes
    table3 : 685 000 de lignes
    table4 : 4 600 000 lignes

    est ce que quelqu'un sait s'il y a un moyen d'effectuer la requete plus rapidement?

    Merci bcp

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    peut être en modifiant la requete, mais il faudrait la vraie requete, complète.

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    qu'est ce qui motive l'écriture avec 2 sous requêtes ? Tu ne peux pas tout mettre dans le FROM ?

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut
    Si je peut tout mettre, c'etait pour s'implifier.

    Voila la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    select record_date,trans_id,x.buyer_id,dispatch_code1,tax_code,origin,name,string_value,date_value,MONT,BILL_TO
    	from (	
    	select t.record_date,t.trans_id,buyer_id,dispatch_code1,tax_code,t.origin,name,string_value,date_value,amount as MONT
    	from transac t,transac_detail d
    	where t.TRANS_ID = d.TRANS_ID
    	and buyer_id like 'CTR%'
    	and isolated_invoice_id is null
    	and amount != 0
    	and ((name='parameter.COMPTACOD') or (name='default.recurring_start') or (name='default.recurring_stop'))) x, 
    	(select buyer_id,max(date_value) as BILL_TO
    	from account_operation a, operation_detail d 	
    	where a.OPERATION_ID = d.OPERATION_ID 
    	and name = 'bnr.bill_to' 
    	group by buyer_id) y
    	where x.buyer_id = y.buyer_id(+)
    	order by buyer_id,trans_id,string_value,date_value;
    la 2éme requete me sert juste a recupérer la plus grand date de chaque client et a la positionner dans mon select tout la haut.

    le probleme, c'est la structure des table operation_detail et transac_detail qui sont des tables géneriques.

    elles possedent 4 colones : id,name,string_value,date_value.
    cela permet d'ajouter n'importe quel attribut (le nom de l'attibut dans name, la valeur dans date_value ou string value et le lien vers la reference du champ de la table principale).

    je sais pas si je suis clair. Enfin cela donne un nombre de lignes tres important mais j'ai fais cette reque pour tour recuperer d'un coup et traité les données apres.

    J'avais dans un premier temps decomposer en plusieur requete que je parcourai avec des curseurs, mais la c'est encore pire....

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et le plan d'exécution ?

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut
    tu entend quoi par plan d'execution?

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par crocodingo Voir le message
    tu entend quoi par plan d'execution?
    l'explain plan recherche

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pour simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT t.record_date, t.trans_id, buyer_id, dispatch_code1, tax_code, t.origin, NAME, 
    		string_value, date_value, amount AS MONT,
    		(SELECT MAX(date_value) 
    				FROM ACCOUNT_OPERATION a, OPERATION_DETAIL d 	
    				WHERE a.operation_id = d.operation_id 
    				AND NAME = 'bnr.bill_to' 
    				WHERE buyer_id = d.buyer_id -- ou t.buyer_id... Je ne sais pas dans quelle table
    				) AS BILL_TO
    FROM TRANSAC t, TRANSAC_DETAIL d
    WHERE t.TRANS_ID = d.TRANS_ID
    AND buyer_id LIKE 'CTR%'
    AND isolated_invoice_id IS NULL
    AND amount != 0
    AND ((NAME='parameter.COMPTACOD') OR (NAME='default.recurring_start') OR (NAME='default.recurring_stop'))
    ORDER BY buyer_id,trans_id,string_value,date_value;

Discussions similaires

  1. Optimisation de requete
    Par Scorff dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 11/07/2005, 09h59
  2. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26
  4. Optimisation de requete
    Par cyril dans le forum SQL
    Réponses: 3
    Dernier message: 09/10/2003, 08h57
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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