VMR
테이블에 마지막 20 개 레코드를 유지하고 다른 모든 레코드를 삭제하고 싶습니다. VMR 테이블에는 5000000
개의 레코드와 레코드가 있습니다. 또한 VMR
테이블에있는 create_date 열이 있고 고유하지 않은 인덱스가 있습니다. rownum을 사용하여 레코드를 삭제하고 아래의 쿼리를 사용하여 최근 20 개의 레코드를 유지하려고 시도했지만 삭제에 너무 많은 시간이 걸렸습니다. 쿼리를 더 빨리 실행할 수있는 다른 방법이 있습니까?최근 20 개의 레코드를 유지하고 oracle sql의 다른 레코드를 삭제하십시오
delete from VMR
where rowid not in
(select rowid
from VMR
where rownum <=20);
쿼리를 설명해 할 수 있습니다? 그것은 나에게 복잡해 보인다. 그리고 나는 결코 쿼리에서 파티션을 사용하지 않았다. – Andrew
실제로 파티션을 사용하지는 않는다.이 파티션은'GROUP BY' 절과 같다. 에 의해 순서대로, 그것은 중요하지 않기 때문에. 이것은 첫 번째 행을 1로, 두 번째를 2 등으로 정렬 한 다음이 데이터로 20보다 큰 모든 것을 삭제합니다. @Andrew – sagi
https://docs.oracle.com/cd/B19306_01/server.102/ b14200/functions137.htm – sagi