반응형
안녕하세요,
오늘은 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**를 사용.
감사합니다.
반응형
'Database' 카테고리의 다른 글
[ Oracle ] index에 대하여.. (2) | 2024.12.27 |
---|---|
[ SQL ] Hint에 대하여 알아보자 (feat.Oracle) (1) | 2024.12.23 |
Oracle 무결성 제약조건 위배되었습니다- 부모 키가 없습니다 (0) | 2024.11.28 |
[Oracle] Merge문 (1) | 2024.11.27 |
Oracle) 데이터 형식 VARCHAR2 -> CLOB로 변경하기 (0) | 2024.11.26 |