|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Bonjour,
J'ai une base de données RADIOLOGIE avec 565 000 données. La base temporaire rados_mediweb contient 107 000 données. Il y a un index sur la table rados_mediweb Voila ma requete SQL : Code :
Voici l'explan plan de cette requete sql : Citation:
Merci |
|||
|
|
01
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Code :
|
||
|
|
00
|
|
|
#3 |
![]() ![]() |
Et vous noterez que cette solution vous a été proposée il y a presque deux mois :
http://www.developpez.net/forums/d11...te-update-sql/
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Déjà ajouter un index sur (id_demande2,type_examen, date_prescription) pourrait aider.
|
|
|
00
|
|
|
#5 | |||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Vous n'êtes pas dans la bonne direction. Selon mon humble avis, il faut d'abord prendre les bonnes habitudes de diagnostique des problèmes de performance. L'un de nous devrait écrire un article dans lequel sera orienté tout intervenant confronté à un problème de performance. Je pense à particulièrement ce genre d’article
http://forums.oracle.com/forums/thre...63295&tstart=0 http://forums.oracle.com/forums/thre...812597#1812597 Pour en revenir à votre question, que signifie pour nous autres lecteurs de votre question ceci: Citation:
Vous semblez avoir la conclusion que les responsables des 7 heures de votre update sont les selects sur la table radio_mediweb ? Avez-vous une preuve où des indications comme des traces files confirmant ceci? Est-ce que la table radiologie possède des triggers qui eux, peut-être, font un traitement lourd ? Est-ce que la table radiologie possède des contraintes d’intégrités nécessitant des vérifications avant update. Est-ce que la table radiologie possède des indexes ? Est-ce que cet update est fait pendant un temps où la base de données est très active (la table radio_mediweb est en train de bouger pendant l’update). Activez les traces (10046 events) et regardez qui consomme le plus de temps dans votre update Code :
|
|||
|
|
11
|
|
|
#6 | ||
![]() ![]() |
J'ajouterai que la requête est de plus mal écrite.
Je ne l'avais pas vu hier, mais à mon avis on peut l'écrire ainsi : Code :
__________________
Email : http://scr.im/waldar |
||
|
10
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
|
|
|
10
|
|
|
#9 | |||||
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Merci de vos réponses,
En fait j'avais déjà le même index que mnitu préconise. De plus je dois faire 2 updates sur 2 champs. Je ne peux pas faire comme waldar préconise. Voila la requete finale que je dois améliorer : Code :
A cause de r.id_examen à updater avec m.lopnr je ne peux pas faire l' update simplifiée de waldar. J'ai trouvé un article sur l'optimisation des requetes sql. http://sqlpro.developpez.com/cours/optimiser/ Cet article préconise d'utiliser "join on" plutot que la jointure sur "where". J'obtiens donc cette requete suivante : Code :
Citation:
Avant de tester ma requete sur ma base de test je prefere faire des optimisations. En effet les tests sont tres longs . |
|||||
|
|
00
|
|
|
#10 | |
![]() ![]() |
Erf... à éviter.
Citation:
La meilleure solution à implémenter, c'est celle de la première réponse.
__________________
Email : http://scr.im/waldar |
|
|
10
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
![]() Donc avec Oracle oubliez-le. |
|
|
|
10
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Merci waldar de ta réponse rapide !
EN fait j'ai une erreur "ORA-00905: Mot-clé absent" lorsque j’exécute la solution avec merge. J'ai regardé si il ne manquait pas un espace ou autre mais cela me semble ok : Code :
En faite il me semble qu'on utilise des bases 8i sur nos serveurs en production. C'est pourquoi je ne peux pas utiliser MERGE malheureusement ! |
||
|
|
00
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Merge en Oracle 9 impose la présence de 2 clauses
When Matched... When Not Matched ... |
|
|
00
|
|
|
#14 |
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
En faite il me semble qu'on utilise des bases 8i sur nos serveurs en production. Or Merge est supporté uniquement à partir de la serveur 9i. C'est pourquoi je ne peux pas utiliser MERGE malheureusement !
|
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Alors pour l’instant faite l’update corrélé. Avec les bons indexes et vu la volumétrie que vous avez donné ça ne peut pas dure 7H.
Si c’est le cas fait une trace comme Mohammed Houri a indiqué. |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com