Je souhaite conserver les 20 derniers enregistrements dans la table VMR
et supprimer tous les autres enregistrements. La table VMR a 5000000
enregistrements et sa croissance. J'ai également la colonne create_date qui a date datatype
dans la table VMR
et il a l'index non unique. J'ai essayé d'utiliser rownum pour supprimer les enregistrements et conserver les 20 derniers enregistrements en utilisant la requête ci-dessous, mais cela prend trop de temps pour la suppression. Existe-t-il un autre moyen d'exécuter la requête plus rapidement?Conserver les 20 derniers enregistrements et supprimer d'autres enregistrements dans oracle sql
delete from VMR
where rowid not in
(select rowid
from VMR
where rownum <=20);
pouvez-vous s'il vous plaît expliquer la requête? Il n'a pas l'habitude d'utiliser la partition dans les requêtes – Andrew
Il n'utilise pas réellement les partitions, cette partition est comme une clause GROUP BY pour classer les lignes, comme vous pouvez le voir, j'ai utilisé '1' et' 1' dans l'ordre par, puisque cela n'a pas d'importance. Cela classe juste la première rangée comme 1, deuxième comme 2 et ETC .. et puis avec ces données, supprimez tout ce qui est plus grand que 20. @Andrew – sagi
https://docs.oracle.com/cd/B19306_01/server.102/ b14200/functions137.htm – sagi