DELETE vs TRUNCATE vs DROP비교
Delete
- 데이터 행 row
- 조건절 WHERE사용
- 트랜잭션 내에서 롤백가능
- 트리거 실행함
- 속도느림
- 저장공간회수안함
- 테이블구조 유지함
TRUNCATE
- 데이터전체(테이블)
- 조건절사용안함, 전체삭제만 가능
- 롤백불가
- 트리거 실행불가
- 속도 빠름
- 저장공간회수,공간 초기화됨
- 테이블 구조 유지함
DROP
- 전체객체(테이블, 뷰)
- 조건절사용안함
- 롤백불가
- 트리거 실행불가
- 속도 매우 빠름
- 테이블구조까지 삭제, 저장공간회수
- 테이블삭제된다.
DELETE
- 테이블 특정 행 제거용, 테이블에서 조건충족하는 행만 제거한다.
- 트랜잭션 적용가능, ROLLBACK으로 복구가능
- 트리거 작동함
- Undo/Redo 로그남긴다. 그래서 느리다.
에시 :
DELETE FROM customer WHERE region = "seoul"
DELETE FROM customer;
TRUNCATE
- 테이블의 모든 행을 즉시 삭제
- 테이블 초기화용
- WHERE없음, 전체 삭제만 가능하다.
- 즉시반영하며 트랜잭션 처리불가하고 따라서 롤백도 불가하다.
- 트리거 작동안함
예시 :
TRUNCATE TABLE customer;
주의사항
- 복구불가
- AUTO_INCREMENT가 초기화된다. ← 이건 MySql한정
DROP
- 테이블자체를 삭제, 테이블제거용
- 테이블 + 데이터 + 제약조건 + 인덱스 싹다 제거한다
- 롤백불가 , 완전삭제
- 테이블 자채가 사라지기 때문에 재사용도 불가
예시 :
DROP TABLE customer;
예상질문과답변
Q. DELETE 와 TRUNCATE 차이?
- delete는 조건지정가능, 트랜잭션으로 롤백가능, 근데 느리다. 특정행제거용
- truncate는 전체 행을 빠르게 제거하고 롤백불가, 트리거작동안함, 테이블 초기화용
Q.TRUNCATE는 DELETE인데 왜 DDL처럼 작동하나
- 내부적으로 데이터를 하나씩 지우지 않기 때문
- 세그먼트를 초기화하여 빠르게 비우는 방식이다.
- 그래서 로그를 (거의) 남기지 않고 대부분의 DB에서 DDL처럼 트랜잭션 밖에서 작동
Q.DROP과 Truncate의 차이?
- Truncate는 테이블 구조를 남긴다.
- Drop은 데이블를 제거하여 구조, 데이터, 인덱스도 모두 제거한다.
- truncate하면 AUTO_INCREMENT도 초기화된다.
Q. DELETE, TRUNCATE는 힙테이블에서 어떻게 다르게 동작하나
- delete는 각 레코드를 개별 삭제하므로 블록 구조가 유지되고 undo 로그가 많다.
- trucnate는 힙 테이블의 세그먼트를 초기화하므로 휠씬 빠르게 작동하나 롤백이 불가
Q. TRUNCATE는 트랜잭션안에서 롤백이 왜 불가한가
- truncate는 내부적으로 DDL로 처리되며,
- DBMS에서는 DDL수행시 자동커밋하기 떄문이다.
- 따라서 트랜잭션 블록안엥서 실행해도 commit(확정) 이 수행되어 롤백되지 않는다.
힙테이블과의 연관성
힙테이블이란?
- 데이터가 저장순서없이 블록에 무작위로 저장되는 일반적인 테이블 구조
- 대부분DBMS가 기본적으로 힙 테이블을 사용
- 인덱스가 없는 상태에서 힙 테이블을 full scan해야 원하는 데이터를 찾을 수 있다.
연관성설명 (힙테이블에서 동작을 중심으로)
- TRUNCATE
- 테이블 세그먼트의 전체 블록을 빠르게 초기화
- 힙 전체를 제거하여 새로 재할당한다.
- 힙 테이블 세그먼트 초기화되고
- 메타데이터도 유지됨
- DELETE
- 블록에 저장된 각 레코드를 하나씩 제거
- 행은삭제되지만 블록은 삭제안된다.
- 힙 테이블 세그먼트 유지되고 블록만 사용중지된다.
- 테이블 메타데이터도 유지
- DROP
- 힙 데이블의 구조자체와 메타데이터 모두 제거한다.
- 힙 테이블 세그먼트, 메타데이터 모두 제거된다.
예상질문과답변
Q. DELETE 와 TRUNCATE 차이?
- delete는 조건지정가능, 트랜잭션으로 롤백가능, 근데 느리다. 특정행제거용
- truncate는 전체 행을 빠르게 제거하고 롤백불가, 트리거작동안함, 테이블 초기화용
Q.TRUNCATE는 DELETE인데 왜 DDL처럼 작동하나
- 내부적으로 데이터를 하나씩 지우지 않기 때문
- 세그먼트를 초기화하여 빠르게 비우는 방식이다.
- 그래서 로그를 (거의) 남기지 않고 대부분의 DB에서 DDL처럼 트랜잭션 밖에서 작동
Q.DROP과 Truncate의 차이?
- Truncate는 테이블 구조를 남긴다.
- Drop은 데이블를 제거하여 구조, 데이터, 인덱스도 모두 제거한다.
- truncate하면 AUTO_INCREMENT도 초기화된다.
Q. DELETE, TRUNCATE는 힙테이블에서 어떻게 다르게 동작하나
- delete는 각 레코드를 개별 삭제하므로 블록 구조가 유지되고 undo 로그가 많다.
- trucnate는 힙 테이블의 세그먼트를 초기화하므로 휠씬 빠르게 작동하나 롤백이 불가
Q. TRUNCATE는 트랜잭션안에서 롤백이 왜 불가한가
- truncate는 내부적으로 DDL로 처리되며,
- DBMS에서는 DDL수행시 자동커밋하기 떄문이다.
- 따라서 트랜잭션 블록안엥서 실행해도 commit(확정) 이 수행되어 롤백되지 않는다.
DDL

힙테이블과의 연관성
힙테이블이란?
- 데이터가 저장순서없이 블록에 무작위로 저장되는 일반적인 테이블 구조
- 대부분DBMS가 기본적으로 힙 테이블을 사용
- 인덱스가 없는 상태에서 힙 테이블을 full scan해야 원하는 데이터를 찾을 수 있다.
힙테이블 도식화

연관성설명 (힙테이블에서 동작을 중심으로)
- TRUNCATE
- 테이블 세그먼트의 전체 블록을 빠르게 초기화
- 힙 전체를 제거하여 새로 재할당한다.
- 힙 테이블 세그먼트 초기화되고
- 메타데이터도 유지됨
- DELETE
- 블록에 저장된 각 레코드를 하나씩 제거
- 행은삭제되지만 블록은 삭제안된다.
- 힙 테이블 세그먼트 유지되고 블록만 사용중지된다.
- 테이블 메타데이터도 유지
- DROP
- 힙 데이블의 구조자체와 메타데이터 모두 제거한다.
- 힙 테이블 세그먼트, 메타데이터 모두 제거된다.
메모리 구조
