Bonjour,

J'ai un problème de performance concernant la suppression de masse.

Il existe déjà un fil de discussion : http://www.developpez.net/forums/sho...d.php?t=218129

Je suis en 9i mais je vais bientôt passer en 10g.

J'ai environ 3'500'000 enregistrements à supprimer.
Je ne peux pas faire de partition et recréer la table serait beaucoup trop couteux.

Ma requête dépasse allègrement les 2 heures ?? (elle n'est pas terminée)

Existe-il un moyen de delete sans utiliser les roolbacks segments ou une autre astuce comme un truncate par exemple ?

Exemple avec 2'000'000
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
insert into TMP_BATCH_EXTRACTION (ID) (select ID from TARTICLE where etatobjet=1)
 
delete from TARTICLE A where ID in (select B.ID from TMP_BATCH_EXTRACTION B)
Explain plan du delete

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
 
DELETE STATEMENT Optimizer Mode=CHOOSE		8 K	 	16446  	 	      	             	 
  DELETE	HERMES_USER.TARTICLE	  	 	 	 	      	             	 
    NESTED LOOPS		8 K	1 M	16446  	 	      	             	 
      SORT UNIQUE		  	 	 	 	      	             	 
        TABLE ACCESS FULL	HERMES_USER.TMP_BATCH_EXTRACTION	8 K	494 K	11  	 	      	             	 
      INDEX UNIQUE SCAN	HERMES_USER.PK_TARTICLE	1  	74  	1
ce que j'ai trouvé : http://www.dbasupport.com/oracle/ora...alData02.shtml

En vous remerciant
Boutss