J'ai une table qui contient des millions de lignes. Je veux supprimer toutes les données de plus d'une semaine en fonction de la valeur de la colonne last_updated.
Voici mes deux requêtes, P>
Approche 1: P>
l_lastupdated varchar2(255) := to_char(sysdate-nvl(p_days,7),'YYYY-MM-DD'); insert into B(ID) select ID from A where LASTUPDATED < l_lastupdated; delete from A where id in (select id from B);
3 Réponses :
Votre dateDeformat stockée semble appropriée pour un tri correct, vous pouvez donc aller à l'inverse et convertir sysdate en chaîne: de sorte que ce serait: p> Delete from A where last_updated < to_char(sysdate-7, ''yyyy-mm-dd'');
Si vous essayez de supprimer la plupart des rangées de la table, je vous conseillerais d'aller avec une approche différente, à savoir: puis p> et enfin, vous pouvez renommer la nouvelle table à l'ancienne table. P> Vous pouvez toujours partitionner la nouvelle table (c.-à-d. Créer la nouvelle table avec une déclaration séparée contenant les clauses de partitionnement et Ensuite, avez un insert comme sélectionnez dans la nouvelle table de l'ancienne table). P> De cette façon, lorsque vous devez supprimer des lignes, c'est une simple question de déposer la ou des partitions pertinentes. P> p>
Je n'irais pas renommer la table, car cela perd des déclencheurs, des contraintes, des références de clé étrangère et probablement plus. Il suffit d'insérer dans la table originale tronquée.
@Gordonlinoff Renaming est plus rapide, mais vous avez raison, vous devez recréer toutes les contraintes associées, déclencheurs, etc. de l'ancienne table, etc. Vous perdez l'avantage de faire la table partitionnée (sauf si vous n'êtes pas sur 12.2 ou plus et que vous puissiez faire partitionnement en ligne de la table)
En supposant que la suppression supprime une fraction significative des données et des millions de lignes, approche trois: https://asktom.oracle.com/pls/apex/f?p=100:11:0 :: :: p11_question_id: 2345591157689 p>
Le problème fondamental est probablement que vous stockez des dates telles que Strings.so, à moins d'un index basé sur la fonction sur
last_updated code> Cela ne fera pas une grande différence. L'approche 2 est en fait une manière rond-point de faire la même chose.