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 )
Partager