Bonjour
C'est ma première demande....
J'ai un souci de performance avec cette requête stockée.
Il s'agit de déplacer des rows d'une table vers une table identique mais dans une base d'archives. Les rows insérées dans la table de la base archives viennent de la table production d'où elles sont retirées immédiatement après par delete.
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
32
33
34 BEGIN DECLARE RROL CHARACTER(20); DECLARE RART CHARACTER(12); DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE REC CURSOR FOR SELECT ID_FACTURE, ID_ARTICLE FROM DBPROD.T_ARCHIVES WHERE AA_DATARCH is null ; OPEN REC; FETCH NEXT FROM REC INTO RROL, RART; label0 : WHILE ( SQLCODE=0 ) DO /*==== Archivage */ /* T_HISTACTU */ INSERT INTO DBARCHIVE.T_HISTACTU ( SELECT * FROM DBPROD.T_HISTACTU WHERE OID_OPERA IN ( SELECT OID_OPERA FROM DBPROD.TJ_POURS WHERE ID_FACTURE = RROL AND ID_ARTICLE = RART ) ) ; /*==== Suppression */ /* T_HISTACTU */ DELETE FROM DBPROD.T_HISTACTU WHERE OID_OPERA IN ( SELECT OID_OPERA FROM DBPROD.TJ_POURS WHERE ID_FACTURE = RROL AND ID_ARTICLE = RART ) ; FETCH NEXT FROM REC INTO RROL, RART; END WHILE label0 ; CLOSE REC;
Le tout tourne sous db2 et iserie 520 avec version OS 5.4. Cette requête dure en moyenne 8 heures. En mettant un index sur la table C, je suis descendu a 5 heures mais je trouve que cela fait encore beaucoup.
Ce n'est pas moi qui ait développé ces requêtes mais je les "récupère" suite à un départ. Je ne suis pas un cador en SQL. Merci aux bonne volontés de m'orienter vers certaines pistes (si c'est possible) pour tenter d'améliorer les temps d'exploitation. Là je sèche un peu. Les tables ne sont pas énormes TABLE A = 75400 et TABLEC=320000



Répondre avec citation




. merci. Je vais faire mes tests et reviendrai vers vous dans quelques temps

Partager