상세 컨텐츠

본문 제목

데이터 삭제 delete / truncate / partition drop 쓰는 방법 차이

IT/DB

by JR 2025. 12. 5. 14:33

본문

300x250
반응형

 

 

 


삭제 목적에 따라 delete / truncate / drop / partition drop 중 어떤 걸 쓰는지가 달라지는 거라서 정리


✅ 1. DELETE는 왜 쓰는가?

DELETE = 데이터만 지움 (파일 공간은 남김)

  • DELETE 는 레코드를 하나씩 지우는 명령
  • InnoDB 는 “undo/redo 로그”, “transaction log” 를 유지해야 해서
    파일을 바로 줄일 수 없음 → 대신 “빈 공간으로 표시”만 함.
  • 즉, DELETE는 공간을 회수하는 게 목적이 아니라 ‘레코드 단위 삭제’가 목적.

🔹 DELETE가 쓰이는 이유

  • 조건부 삭제가 가능
  • DELETE FROM orders WHERE status = 'CANCEL';
  • “업무 로직상 필요한 삭제” (특정 고객 데이터 제거 등)
  • 외래키 제약 때문에 TRUNCATE 불가한 경우
  • 삭제 작업이 트랜잭션 로그를 남기기 때문에 “실수시 ROLLBACK 가능”

👉 DELETE = 안전하고 세밀한 삭제


✅ 2. TRUNCATE는 왜 쓰는가?

TRUNCATE = 테이블 전체를 빠르게 비움 + 공간 회수

  • 테이블을 초기화하는 DDL(Drop → Create) 이랑 거의 동일
  • Undo/Redo 로그도 거의 안 남아서 매우 빠르게 동작.
  • AUTO_INCREMENT 값도 초기화됨.
  • 외래키가 걸려 있으면 실행 불가.

🔹 TRUNCATE 특징

  • 파일 크기를 대부분 회수함 (특히 File-Per-Table 모드)
  • 개별 레코드 삭제가 아니라 테이블 자체를 재생성하는 방식
  • ROLLBACK 불가능 → 위험함

👉 TRUNCATE = 전체 삭제 + 파일 크기 정리 + 빠름


✅ 3. DELETE vs TRUNCATE 핵심 비교

항목 DELETE TRUNCATE
삭제 단위 레코드 단위 전체 테이블
속도 느림 매우 빠름
트랜잭션 지원 (rollback 가능) 비지원
로그 row 단위 기록 최소 기록
파일 공간 회수 ❌ 회수 안 됨 ⭕ 회수됨
AUTO_INCREMENT 유지 초기화

✅ 4. “파일 크기 회수”가 목적이면 DELETE는 맞는 선택이 아님

🔹 DELETE는 “논리 삭제/데이터 삭제” 목적

파일은 그대로 남는 게 정상

🔹 디스크 공간 회수가 목적이면 아래 택해야 함

  1. TRUNCATE TABLE
  2. OPTIMIZE TABLE (테이블 재구조화 + 파일 압축)
  3. DROP + CREATE
  4. 파티션 드롭→ 이건 파일 자체가 즉시 삭제됨
    → 대용량 테이블에서는 최강 옵션
  5. ALTER TABLE logs DROP PARTITION p20240101;

✅ 5. 결론

✔ DELETE가 쓸모 없다는 뜻이 아니다

  • 데이터 삭제 목적에는 완벽함
  • 다만 파일 크기를 줄이지는 않을 뿐

✔ 파일 크기를 줄이려면

  • TRUNCATE
  • OPTIMIZE TABLE
  • 파티션 DROP
  • 테이블 DROP 후 재생성

✔ 파티션을 쓰는 이유

  • 바로 이 **“파티션별 DROP 시 파일 공간 즉시 회수”**가 최강 장점
    → delete 수백만 건보다 ALTER TABLE DROP PARTITION 0.1초짜리가 훨씬 좋음

300x250
반응형

관련글 더보기