Bonjour,
Un premier problème est le fait de lancer 3 millions de delete différents au lieu de parser un delete et de l'exécuter 3 millions de fois.
Tu peux déjà mettre:
alter session set cursor_sharing = force;
au début pour éviter ce reparsing à chaque fois.
Un peu mieux serait:
- récupérer la clause where des deletes
- charger les valeurs dans une table temporaire (sqlload)
- faire delete where ... in (select ... from cette table )
Sinon le top pour supprimer 40% des enregistrements, avec cette table temporaire chargée à partir du fichier:
- créer une table avec seulement ce que tu veux garder (create table ... as select ...)
- supprimer l'ancienne table
- renommer la nouvelle table
Moi je trouve que 85 min est plutot honnete dans ce cas.
C'est le moins qu'on puisse dire ! C'est même plus proche de la science fiction !
Parce que tu as une table de 7500000 enregistrements (vu que 3000000 representent 40%) et sans index tu ferais 3000000 de full table scan dessus (un full scan pour chaque delete)
Soit j'ai mal lu un chiffre, soit c'est impossible avant une bonne dizaine d'année 
Est-tu bien sur qu'il n'y a pas d'index ?
Cordialement,
Franck.
Partager