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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
       )