2011-03-16 5 views
0

나는 테이블이 타임 스탬프를 기반으로 파티션 분할 나는 기반으로 데이터를 삭제해야<tab> 파티션 <part.>에서 삭제할 where 절을 사용할 수 있습니까?

(같은 partition1 9 개월 된 데이터를해야합니다, partition2partition3 그렇게 3 개월 데이터를 가지고, 6 개월, 데이터가) 특정 파티션의 조건.

delete from table1 partition partition3 
where group id in (select * from table1 where group_code='pilot'); 

이 작업은 partiton3에서만 삭제됩니까? 모든

답변

1

첫째, 구문은 다음과 같습니다 둘째

delete from table1 partition(partition3) 

, 당신 하지는 이름 파티션을 참조해야합니다. 테이블의 실제 레이아웃에 대한 종속성을 만듭니다. 오늘은 매월 분할 될 수 있지만, 앞으로 언젠가는 몇 주 또는 며칠에 걸쳐 다시 분할 될 수 있습니다. 이 경우 코드가 손상됩니다. 오라클은 파티셔닝 컬럼의 술어로부터 파티션을 잘 추정 할 수 있습니다. 분할 된 테이블을 잊어 버리십시오.

세 번째로 select *이 (가) ID와 비교되므로 하위 선택이 실패합니다.

당신이 찾고있는 문은 가능성이 같은 같습니다 당신이 정기적으로

delete table1 
where group_id in (select group_id from table2 where group_code = 'pilot') 
    and your_date_column 
     between trunc(sysdate,'mm') - interval '3' month 
      and trunc(sysdate,'mm') - interval '2' month 

이 최적화 알 수 할 단순히 수 있다는 것을 의미

delete 
    from table1 
where group_code = 'pilot' 
    and partition_column = 'some value'; 
0

파티션이 투명하게 작동을하는 두 번째 술어 파티션 3의 데이터 만 삭제해야 함을 의미합니다.

감사합니다.
Rob.