|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 2 ![]() |
Bonjour,
si je me permets de poster ici, c'est que je suis vraiment dans la .J'essaye d'optimiser des requêtes qui portent sur des millions de lignes, depuis quelques temps, mais c'est encore beaucoup trop lent. Alors j’espère que vous pourrez me donner quelques pistes. voilà un exemple de requête et son plan d’exécution : Code :
Peut être que c'est au niveau des requetes, des indexes, ou bien d'oracle lui même... Je ne sais plus trop quoi faire pour optimiser cette requête. Merci pour l'aide que vous pourrez m'apporter. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Il me semble que votre problème viens de la sous-requête
Code :
|
||
|
|
10
|
|
|
#3 | ||||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Le temps total de votre requête est de 00:04:08 alors que les deux premières opérations à elles seules prennent (via le HASH JOIN) 00 :04 :04
Code :
Code :
Code :
|
||||||
|
|
10
|
|
|
#4 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 2 ![]() |
Bonjour,
merci pour vos réponses. Pour mnitu : Avec toute ma bonne volonté, j'ai essayé de tourner la requête dans tous les sens en y incorporant row_number() over (ORDER BY CHAMP6 DESC) r where r=1 mais je n'arrive pas du tout à la faire fonctionner... Si une âme charitable pouvait me donner la voie... pour Mohamed.Houri : il y a déjà un index sur "TABLE2"."CHAMP1" Merci encore de m'aider. |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Code :
|
||
|
|
10
|
|
|
#6 | ||
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
Pouvez vous faire l'explain plan avec cette réécriture qui évite les sous requête et les remplace par des vues dynamiques
Code :
|
||
|
01
|
|
|
#7 | ||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
En plus de ce qui vous a été conseillé pour la réecriture de la requête, je me pose la question suivante: combien d'enregistrement votre requête produit-elle? 1 enregistrement!!!
Code :
Code :
Ceci va à l'encontre de la bonne performance :"Start Small and Keep Small". Commencer par le plus petit volume de données possible et essayer de le rester. En d'autres mots, éliminez les données dès les premières opérations. D'où la proposition de Marius de réecrire la requête. Enfin, si vous sélectionnez plus d'un enregistrement alors utilisez plutôt la génération d'un explain plan qui contient les estimations faites par le CBO (E-Rows et A-Rows) afin de pouvoir localiser où les discordances commencent et peut-être comprendre pourquoi l'index déjà présent sur la table2 n'est pas utilisé. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com