다들 알고 계시겠지만 TRUNCATE 와 DELETE의 비교입니다.
TRUNCATE 명령은 WHERE 절이 없는 DELETE와 유사하나, 아래 내용들에 있어 차이를 보인다.
-
TRUNCATE는 테이블 크기에 관계없이 매우 빠르다. DELETE는 롤백이 발생될 경우에 대비하여 언두 정보를 생성하여 로그 파일에 기록하지만, TRUNCATE는 언두를 생성하지 않는다.
-
TRUNCATE는 DDL로서 다른 DDL과 마찬가지로 묵시적으로 커밋을 수행하기 때문에 롤백 할 수 없다. 커밋되지 않은 상태의 DML변경 또한 TRUNCATE 명령과 함께 커밋 될 것이다.
-
TRUNCATE는 테이블과 모든 인덱스의 HWM(high-water mark)을 리셋한다. 전체 테이블 스캔 및 인덱스 전체-고속 스캔(index fast-full scan)은 HWM까지의 모든 데이터 블록을 읽기 때문에 DELETE 후에는 전체 스캔 작업이 향상되지 않지만, TRUNCATE 후 이 작업은 매우 빨라진다.
-
TRUNCATE는 어떤 DELETE 트리거도 발생시키지 않는다.
-
한 사용자가 다른 사용자의 테이블을 TRUNCATE 하도록 허용하는 객체 권한은 존재하지 않는다. 다른 스키마의 테이블을 TRUNCATE하기 위해서는 DROP ANY TABLE 시스템 권한이 요구된다.
-
테이블이 TRUNCATE될 때, 테이블과 모든 인덱스의 스토리지는 초기값으로 리셋된다. DELETE는 테이블이나 인덱스의 크기를 축소시키지 않는다.
'Database > ORACLE' 카테고리의 다른 글
예약어와 중복되는 이름을 사용하려면 (0) | 2011.05.07 |
---|---|
테이블스페이스 생성 및 확장 (0) | 2011.05.07 |
[Oracle]테이블스페이스 생성하기 (0) | 2011.05.07 |
[오라클]테이블에 주석 입력 (0) | 2011.04.29 |
오라클 덤프/임포트 , 유져생성 및 권한주기 (0) | 2011.04.06 |