데이터 제거 명령 비교

DELETE TRUNCATE DROP 비교

세 명령은 모두 “없앤다”처럼 보이지만 남기는 것이 다릅니다. 운영에서는 속도보다 복구 가능성, 참조 관계, 저장 공간 효과를 먼저 봐야 합니다.

DELETE FROM

행 단위
남는 객체 구조 테이블과 인덱스 구조는 그대로 유지됩니다.
복구 커밋 전 트랜잭션 안에서는 롤백할 수 있습니다.
공간 대량 삭제 뒤에도 저장 경계가 남을 수 있습니다.

TRUNCATE TABLE

전체 비우기
남는 객체 구조 테이블 구조는 남기고 모든 행을 빠르게 제거합니다.
복구 롤백 가능 여부는 DBMS와 트랜잭션 처리 방식에 따라 다릅니다.
제약 참조 중인 FK가 있으면 제한될 수 있고, DELETE 트리거는 보통 실행되지 않습니다.

DROP TABLE

객체 삭제
남는 객체 구조 테이블, 데이터, 인덱스, 권한 등 객체 자체가 제거됩니다.
참조 DROP TABLE CASCADE는 자식 데이터 삭제가 아니라 종속 제약/객체 정리입니다.
복구 Oracle Flashback 같은 별도 기능이 없다면 복구 부담이 큽니다.
조건 삭제

일부 행만 지울 때는 WHERE가 가능한 DELETE가 맞습니다.

전체 비우기

로그성 테이블처럼 구조를 재사용하려면 TRUNCATE가 빠르지만 복구 정책을 확인합니다.

객체 제거

DROP은 의존 객체와 배포 코드를 확인한 뒤 마지막 정리 단계에서 실행합니다.

운영 판단 매트릭스

남기는 객체, 복구 가능성, 참조 영향이 먼저 갈라진다.
DELETE: row 제거 table/index 유지 TRUNCATE: 전체 비움 구조 재사용 DROP: 객체 삭제 권한·의존성 영향 복구/참조/공간
판단 축
DELETE
TRUNCATE
DROP
일부 데이터만 지울 때
가장 안전 WHERE, FK, trigger 동작을 그대로 확인한다.
부적합 조건 없이 전체 행을 비운다.
부적합 객체 자체가 사라져 의존 코드가 깨진다.
로그 테이블을 비울 때
느릴 수 있음 로그와 HWM 효과를 별도로 본다.
주 후보 구조를 유지한 채 빠르게 비운다.
재생성 필요 권한, 인덱스, 배포 순서를 다시 맞춘다.
스키마를 폐기할 때
데이터만 제거 객체와 제약은 남아 정리 목적과 다르다.
껍데기 유지 테이블 정의가 계속 남는다.
마지막 단계 백업과 의존 객체 확인 뒤 실행한다.
1. 범위 일부 행인지, 전체 행인지, 객체 폐기인지 먼저 고른다.
2. 참조 FK, trigger, cascade 옵션이 어떤 방향으로 번지는지 확인한다.
3. 복구 트랜잭션 롤백, 백업, flashback 같은 되돌림 수단을 적는다.
4. 공간 HWM, vacuum, reclaim 같은 저장 공간 회수 기준을 분리한다.