상세 컨텐츠

본문 제목

데이터 삭제할때 delete와 truncate 차이점은?

IT/DB

by JR 2025. 12. 2. 16:23

본문

300x250
반응형

 

 

 

 

임시테이블을 비우는 방법에서 DELETE와 TRUNCATE는 비슷해 보여도 내부 동작과 성능, 제약이 완전히 다릅니다.

 


1. DELETE

DELETE FROM temp_table;

특징

  1. 행 단위 삭제
    • 조건절(WHERE) 지정 가능 → 일부 행만 삭제 가능
    • 조건 없으면 모든 행 삭제
  2. 트랜잭션 로그 기록
    • 각 행을 삭제할 때 로그 기록
    • 롤백 가능
  3. 트리거 동작 가능
    • DELETE 트리거가 있으면 실행됨
  4. 속도
    • 대량 데이터 삭제 시 느릴 수 있음 (행 단위 처리)
  5. 제약
    • 테이블 구조, 컬럼, 인덱스 그대로 유지

2. TRUNCATE

TRUNCATE TABLE temp_table;

특징

  1. 전체 테이블 삭제만 가능
    • 조건절 사용 불가
    • 일부 행만 삭제는 안 됨
  2. 로그 최소화
    • 행 단위가 아니라 페이지 단위로 삭제 → 빠름
    • 롤백 불가 (DBMS에 따라 다름, CUBRID는 롤백 가능 여부 확인 필요)
  3. 트리거 동작 안 함
    • DELETE 트리거와 무관
  4. 속도
    • DELETE보다 훨씬 빠름
    • 대용량 테이블에서 특히 유리
  5. 테이블 구조 유지
    • 컬럼, 인덱스 유지
    • AUTO_INCREMENT 초기화 여부는 DBMS별 차이 있음

3. 정리 비교표

구분 DELETE TRUNCATE
삭제 범위 조건 지정 가능 (부분 삭제 가능) 전체 행만 삭제 가능
트랜잭션 로그 기록, 롤백 가능 로그 최소화, 일부 DB는 롤백 제한
트리거 실행됨 실행 안 됨
속도 느림 (행 단위) 빠름 (페이지 단위)
사용 용도 일부 데이터 삭제 전체 테이블 초기화

🔥 임시테이블의 경우

  • 대부분 “전체 비우고 다시 채우는 용도”라면 TRUNCATE가 훨씬 빠르고 깔끔
  • 특정 조건만 삭제해야 한다면 DELETE 사용

✔ 1) DELETE

  • 각 row를 하나씩 삭제 (row-by-row)
  • 트랜잭션 로그 기록 → 느림
  • DELETE 트리거 실행됨
  • 롤백 가능

✔ 2) TRUNCATE

  • 데이터 페이지 자체를 초기화
  • 로그 최소화 → 매우 빠름
  • 트리거 실행 안 됨
  • 많은 DB에서 롤백 제한됨 (CUBRID는 롤백 가능)

 

300x250
반응형

관련글 더보기