본문 바로가기

오라클 TRUNCATE와 DELETE의 차이점 총정리!

by 애덤더미 2015. 1. 27.
반응형

TRUNCATE와 DELETE는 모두 테이블 데이터를 삭제할 때 사용하는 명령어이지만, 성능동작 방식에서 여러 차이점을 보입니다. 이번 포스팅에서는 TRUNCATE와 DELETE의 차이를 간단하고 쉽게 설명해 드리겠습니다.


1. 속도 차이

  • TRUNCATE테이블의 크기에 관계없이 매우 빠르게 실행됩니다.
  • 반면, DELETE삭제한 데이터를 복구할 수 있도록 언두(undo) 정보를 생성하고, 이 과정에서 로그 파일에 기록을 남기기 때문에 TRUNCATE보다 속도가 느립니다.

2. DDL과 DML의 차이

  • TRUNCATEDDL(Data Definition Language) 명령어로, 실행 즉시 자동으로 커밋이 수행됩니다.
    • 즉, TRUNCATE를 실행하면 롤백이 불가능합니다. 만약 TRUNCATE 전에 커밋하지 않은 DML 변경 사항이 있다면, TRUNCATE와 함께 커밋됩니다.
  • DELETEDML(Data Manipulation Language) 명령어로, 커밋이 이루어지기 전까지 롤백이 가능합니다.

3. HWM(High-Water Mark) 리셋

  • TRUNCATE는 테이블과 인덱스의 HWM을 리셋합니다. HWM이란 테이블이나 인덱스에서 실제로 데이터가 저장된 가장 마지막 블록을 의미합니다.
    • 전체 테이블 스캔 및 인덱스 전체 스캔의 경우, HWM까지의 모든 데이터 블록을 읽기 때문에 DELETE 후에는 성능 향상이 없습니다.
    • 반면 TRUNCATE는 HWM을 리셋하므로, 이후의 전체 스캔이 훨씬 빨라집니다.

4. 트리거 실행 여부

  • TRUNCATE어떠한 DELETE 트리거도 발생시키지 않으며, 트리거가 있는 경우에도 데이터를 모두 삭제할 수 있습니다.
  • 반면, DELETE트리거가 정의되어 있는 경우 트리거가 작동됩니다.

5. 권한의 차이

  • TRUNCATEDROP ANY TABLE 시스템 권한이 필요하며, 다른 사용자의 테이블을 직접 TRUNCATE할 권한이 없습니다.
  • 반면, DELETE는 테이블에 대한 DELETE 권한만 있으면 사용할 수 있습니다.

6. 스토리지 관리

  • TRUNCATE테이블과 모든 인덱스의 스토리지를 초기 상태로 리셋합니다.
    • 즉, 데이터를 삭제함과 동시에 테이블과 인덱스의 크기도 축소됩니다.
  • DELETE는 테이블이나 인덱스의 크기를 축소하지 않으므로, 동일한 데이터를 재사용할 때 TRUNCATE에 비해 성능상 불리할 수 있습니다.

자 그렇다면 결론으로 TRUNCATE와 DELETE, 언제 사용할까?

  • 데이터를 완전히 초기화하고 복구할 필요가 없는 경우 TRUNCATE가 더 적합합니다. 속도도 빠르고 HWM이 리셋되기 때문에, 이후 전체 스캔 성능도 좋아지죠.
  • 반면, 데이터 복구가 필요한 경우 또는 조건에 따라 일부만 삭제할 경우 DELETE를 사용합니다. DELETE는 특정 조건을 지정하여 데이터의 일부만 삭제할 수 있으며, 필요 시 롤백할 수 있습니다.

TRUNCATE와 DELETE, 두 명령어의 특성과 차이점을 잘 이해하고, 필요에 맞는 명령어를 선택하여 데이터베이스 성능을 더욱 최적화해 보세요! :)

반응형