[PL/SQL] Temps de mis à jour trop long
Bonjour à tou(te)s,
Environnement : Oracle 8i/Toad/Unix
J'essaye de mettre à jour environ 800.000 lignes dans une table de 17.000.000 de lignes environ. La mise à jour s'effectue suivant deux champs différents mais, sur des lignes comprises dans le même intervalle de temps. Pour le faire, j'utilise 2 curseurs A et B : le curseur A met à jour plusieurs champs et le curseur A un seul champ (déjà mis à jour par le curseur A => écrasement le cas échéant).
Le curseur A retourne plus de ligne que le curseur B; les deux curseurs retournent plus de lignes que le nombre de ligne de la plage à mettre à jour. J'ai plusieurs index (Bitmap et B-tree) sur la table; dont des index sur les deux clés de mise à jour. Le curseur B est beaucoup plus complexe que le curseur A
Mon problème est le suivant : la mise à jour avec le curseur A prend entre 18mn et 1h30 en fonction de la charge du réseau. Tandis qu'avec le curseur B, j'en ai pour 18h minimum!!!
Toutes les pistes pour comprendre d'où vient le problèmes sont les bienvenues.
Merci pour votre aide
Curseur A
Code:
1 2 3 4 5 6 7
| SELECT VR, PA, VK,
AN,VER, SEQ_P,
SEQ_V, LPAD(SUBSTR(SIR,1,14),14,'0') SIR,
IND,ABREGE, SUBSTR(NIVEAU,1,4) NIVEAU,
AUS
FROM CORR
ORDER BY VER |
Curseur B
Code:
1 2 3 4 5 6 7
| SELECT AN,ABREGE
FROM CORR C
WHERE LOE IS NULL
AND AUS=(SELECT MAX(AUS)
FROM CORR C2
WHERE C2.ANLAGE=C.ANLAGE
) |