Bonjour,
Alors voila mon problème. Je dois reprendre un code qui fait la purge d'une table (de très grande taille), parce qu'il est trop lent.
La requete supprime les x premieres lignes, puis si le nombre de ligne supprimée est égal a x, on recommence, jusqu'a ce qu'il n'y ait plus de ligne a supprimer.
Il n'est pas possible de faire le delete en une seule passe, parce que sinon, vu la taille de la table, on explose la taille du rollback segment.
Le problème de performance vient apparament du fait que la requete qui fait la suppression des x premieres lignes, reexecute a chaque fois sa clause where qui est assez complexe.
Si je fait le select (pour avoir tous les id des lignes à supprimer) une seule fois dans un curseur, et que je parcours ce curseur pour faire mes suppressions, et toutes les x suppressions, je fait mon commit.
Est-ce que le fait de faire un commit va "perturber" le contenu de mon curseur ou pas ?
En d'autres termes, est-ce qu'un curseur est viable d'un bout a l'autre alors qu'on fait des commits sur la table d'où est tirée le curseur ?
Accesoirement, si vous avez d'autres solutions simples pour faire ce vidage de table, je suis preneur ^^
Partager