본문 바로가기
Database

Oracle DELETE쿼리와 TRUNCATE차이는?

by Lcoding 2024. 11. 29.
반응형

안녕하세요,

 

오늘은 Where절 없는 DELETE쿼리와 TRUNCATE차이에 대하여 알아보겠습니다.

 

WHERE 절 없는 DELETE와 TRUNCATE 모두 테이블의 모든 행을 삭제하는 효과를 가지지만 여러 면에서 차이점이 있습니다. 

 

1. 동작 방식

특징 DELETE (WHERE 절 없음) TRUNCATE
명령 방식 DML (데이터 조작 언어) DDL (데이터 정의 언어)
삭제 방식 한 행씩 삭제 (로그 기록 포함) 전체 테이블 초기화 (빠르고 효율적)
트랜잭션 롤백 가능 (트랜잭션 시작 후 롤백 가능) 불가능 (DDL이므로 커밋과 동시에 완료)
테이블 구조 유지 유지
(모든 데이터 삭제 후 빈 테이블)
유지
(데이터만 삭제, 구조 및 인덱스는 그대로 유지)
외래 키 제약 조건(FK) 외래 키 제약 조건을 고려하여 작동 외래 키 제약 조건이 있으면 실행 불가
자동 증가 값
(AUTO_INCREMENT)
유지됨 초기화됨 (자동 증가 열 값이 1로 리셋됨)

 

2. 성능

  • DELETE:
    • 행 단위로 삭제하며, 각 삭제 작업이 로그로 기록됩니다.
    • 대량의 데이터 삭제 시 성능이 낮아질 수 있습니다.
  • TRUNCATE:
    • 테이블의 전체 데이터를 즉시 제거합니다.
    • 로그를 최소한으로 기록하므로 DELETE보다 훨씬 빠릅니다.

 

3. 사용 시기

  • DELETE
    • 특정 조건의 데이터를 삭제하려고 할 때 사용.
    • 트랜잭션 관리가 필요한 경우(롤백 가능).
  • TRUNCATE
    • 테이블의 모든 데이터를 빠르게 초기화하고 싶을 때 사용.
    • 롤백이 필요 없고, 삭제 후 테이블 구조를 재사용할 때.

 

4. 예제

DELETE 사용

DELETE FROM table;

TRUNCATE 사용

TRUNCATE TABLE table;

 

5. 주요 차이점 요약

항목 DELETE (WHERE 없음) TRUNCATE
트랜잭션 관리 가능 불가능
성능 상대적으로 느림 상대적으로 빠름
로그 기록 각 행마다 기록 최소한으로 기록
외래 키 제약 조건 고려됨 고려되지 않음
자동 증가 값 초기화 초기화되지 않음 초기화됨

 

6. 결론

  • 테이블의 모든 데이터를 삭제하고 성능이 중요한 경우: **TRUNCATE**를 사용.
  • 데이터 삭제 후 복구 가능성 또는 트랜잭션 처리가 필요한 경우: **DELETE**를 사용.

감사합니다.

반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading