다들 알고 계시겠지만 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 시스템 권한이 요구된다.

 


+ Recent posts