[DB] DELETE, TRUNCATE, DROP

[verify$y]·2025년 7월 31일

CS핵심개념

목록 보기
11/35

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
    • 힙 데이블의 구조자체와 메타데이터 모두 제거한다.
    • 힙 테이블 세그먼트, 메타데이터 모두 제거된다.

메모리 구조

profile
welcome

0개의 댓글