Bonjour,
J'ai éxécuté les requetes d'update sur une table document et radiologie.
Sur ma base de test voici les caractéristiques :
Nombre d’éléments dans la table Radiologie : 84
Nombre d’éléments dans la table Document : 1586
Nombre d’éléments dans la table SAG_DATA_TEMP : 8890
Pour faire une update de la table radiologie cela ne prend que 2 secondes. Par contre si je fais une update de la table document seulement cela fait 2 minutes et 11 secondes !
J'ai besoin d'améliorer les performances car la base de production a les caracteristiques suivantes :
Nombre d’éléments dans la table Radiologie : 139119
Nombre d’éléments dans la table Document : 197145
Nombre d’éléments dans la table SAG_DATA_TEMP : 70369
J'ai déjà essayé le script suivant sur la base de prod mais sur putty l'execution dure plus longtemps que le temps de la session. La durée est trop longue. Comment améliorer mon script suivant :
Je pense que la commande EXISTS pose probleme.
Il ya des index sur la table Document , radiologie mais pas sur SAG_DATA_TEMP. J'essaye de faire un execution plan mais jusqu'ici je n'ai pas réussi a le faire.
Voici mon script :
Merci
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31 DECLARE CURSOR c_SAG_DATA IS SELECT * FROM SAG_DATA_TEMP; BEGIN FOR j IN c_SAG_DATA LOOP UPDATE radiologie rad SET rad.uh_demandeuse = j.code_uh_demande , rad.nip = j.nip_actif WHERE rad.ConcatID = j.s_aphp_reference_acte_rados; UPDATE document doc SET doc.nda = j.nda , doc.noip = j.nip_actif WHERE EXISTS ( SELECT 1 FROM radiologie rad WHERE rad.ConcatID = j.s_aphp_reference_acte_rados AND rad.id_document_lie = doc.id_document ); END LOOP; END; /
Partager