Database

[Oracle] DELETE vs TRUNCATE 차이 한눈에 정리(롤백/커밋 포함)

천방지축 개발노트 2020. 9. 9. 21:37

Oracle에서 용도에 따른 SQL문의 분류 및

Delete와 Truncate 의 특징에 대해 정리해보겠습니다.


명령어의 분류
종류 내용
DDL(데이터 정의어) 테이블 생성과 조작. CREATE, ALTER, DROP, RENAME
DML(데이터 조작어) 데이터의 조작. SELECT, INSERT, UPDATE, DELETE
DCL(데이터 제어어) 유저를 생성하고 권한을 제어하는 명령어. GRANT, REVOKE
TCL(트랜잭션 제어어) 트랜잭션(Transaction)을 제어하는 명령어.

 

 

DDL과 DML 비교
  1. DDL(CREATE, ALTER, RENAME, DROP)은 실행 시점에 암묵적 커밋(Implicit Commit)이 발생한다. 따라서 일반적으로 ROLLBACK으로 되돌릴 수 없다.
  2. DML(INSERT, UPDATE, DELETE)은 트랜잭션 단위로 처리된다. COMMIT을 해야 변경이 영구 반영되고, ROLLBACK으로 변경을 취소할 수 있다(COMMIT 전 변경은 보통 본인 세션에서만 보이고, 다른 세션에는 보이지 않는다).

 

 

DELETE 와 TRUNCATE 비교

delete와 truncate 비교

  DELETE TRUNCATE
성격 DML(데이터 조작) DDL(객체 조작에 가까운 초기화)
ROLLBACK 가능(COMMIT 전) 불가(DDL 특성상 암묵적 커밋 발생)
삭제 범위 원하는 특정 행(Row)를 지울 수 있다(WHERE로 일부 행 삭제 가능) 전체 행만 삭제(WHERE 불가하기 때문에, 특정 행(Row) 지울 수 없음)
성능/부하 행 단위로 삭제되므로 데이터가 많을수록 시간이 오래 걸릴 수 있음(Undo/Redo 부담 증가) 테이블을 “비우는” 방식이라 일반적으로 DELETE보다 빠르고 부하가 적은 편
공간(용량) 데이터는 삭제되지만 할당된 공간이 즉시 줄지 않을 수 있음.

※ 이유: DELETE는 "칸을 비우는 것"에 가깝다. 즉, 데이터를 지워도 테이블이 쓰던 자리(공간)는 그대로 남아 다음 INSERT에서 다시 재사용한다. 그래서 "데이터는 줄었는데, 테이블이 차지하는 용량은 그대로"처럼 보일 수 있다.
옵션에 따라 공간을 반환하거나 유지할 수 있음(예: REUSE STORAGE 등)

※ 이유: TRUNCATE는 테이블을 "초기화"하는 명령이다. 필요하면 공간을 되돌려(반환) 더 작게 만들 수도 있고, 반대로 다시 쓸 공간을 남겨둘 수도 있다(옵션/상황에 따라).
인덱스 인덱스 정의는 유지되며, 삭제된 행에 따라 인덱스도 함께 정리됨 인덱스가 삭제되지는 않는다. 테이블을 비우면 인덱스도 "비워진 상태" 즉, 삭제가 된다
반응형