반응형
TRUNCATE와 DELETE는 모두 테이블 데이터를 삭제할 때 사용하는 명령어이지만, 성능과 동작 방식에서 여러 차이점을 보입니다. 이번 포스팅에서는 TRUNCATE와 DELETE의 차이를 간단하고 쉽게 설명해 드리겠습니다.
1. 속도 차이
- TRUNCATE는 테이블의 크기에 관계없이 매우 빠르게 실행됩니다.
- 반면, DELETE는 삭제한 데이터를 복구할 수 있도록 언두(undo) 정보를 생성하고, 이 과정에서 로그 파일에 기록을 남기기 때문에 TRUNCATE보다 속도가 느립니다.
2. DDL과 DML의 차이
- TRUNCATE는 DDL(Data Definition Language) 명령어로, 실행 즉시 자동으로 커밋이 수행됩니다.
- 즉, TRUNCATE를 실행하면 롤백이 불가능합니다. 만약 TRUNCATE 전에 커밋하지 않은 DML 변경 사항이 있다면, TRUNCATE와 함께 커밋됩니다.
- DELETE는 DML(Data Manipulation Language) 명령어로, 커밋이 이루어지기 전까지 롤백이 가능합니다.
3. HWM(High-Water Mark) 리셋
- TRUNCATE는 테이블과 인덱스의 HWM을 리셋합니다. HWM이란 테이블이나 인덱스에서 실제로 데이터가 저장된 가장 마지막 블록을 의미합니다.
- 전체 테이블 스캔 및 인덱스 전체 스캔의 경우, HWM까지의 모든 데이터 블록을 읽기 때문에 DELETE 후에는 성능 향상이 없습니다.
- 반면 TRUNCATE는 HWM을 리셋하므로, 이후의 전체 스캔이 훨씬 빨라집니다.
4. 트리거 실행 여부
- TRUNCATE는 어떠한 DELETE 트리거도 발생시키지 않으며, 트리거가 있는 경우에도 데이터를 모두 삭제할 수 있습니다.
- 반면, DELETE는 트리거가 정의되어 있는 경우 트리거가 작동됩니다.
5. 권한의 차이
- TRUNCATE는 DROP ANY TABLE 시스템 권한이 필요하며, 다른 사용자의 테이블을 직접 TRUNCATE할 권한이 없습니다.
- 반면, DELETE는 테이블에 대한 DELETE 권한만 있으면 사용할 수 있습니다.
6. 스토리지 관리
- TRUNCATE는 테이블과 모든 인덱스의 스토리지를 초기 상태로 리셋합니다.
- 즉, 데이터를 삭제함과 동시에 테이블과 인덱스의 크기도 축소됩니다.
- DELETE는 테이블이나 인덱스의 크기를 축소하지 않으므로, 동일한 데이터를 재사용할 때 TRUNCATE에 비해 성능상 불리할 수 있습니다.
자 그렇다면 결론으로 TRUNCATE와 DELETE, 언제 사용할까?
- 데이터를 완전히 초기화하고 복구할 필요가 없는 경우 TRUNCATE가 더 적합합니다. 속도도 빠르고 HWM이 리셋되기 때문에, 이후 전체 스캔 성능도 좋아지죠.
- 반면, 데이터 복구가 필요한 경우 또는 조건에 따라 일부만 삭제할 경우 DELETE를 사용합니다. DELETE는 특정 조건을 지정하여 데이터의 일부만 삭제할 수 있으며, 필요 시 롤백할 수 있습니다.
TRUNCATE와 DELETE, 두 명령어의 특성과 차이점을 잘 이해하고, 필요에 맞는 명령어를 선택하여 데이터베이스 성능을 더욱 최적화해 보세요! :)
반응형
'※ 소소한 IT > ORACLE' 카테고리의 다른 글
[Oracle SQL 강좌]SQL의 종류 (0) | 2015.03.10 |
---|---|
컬럼명으로 테이블 찾기!!! (0) | 2015.03.06 |
오라클 숫자 처리 함수 정리(반올림, 올림, 버림, 나머지, 승수) (0) | 2015.01.14 |
오라클 LOCK 완벽 가이드: DML, DDL 잠금 유형부터 해결 방법까지 (0) | 2015.01.14 |
Oracle DB link & synonym 개념 정리 (0) | 2014.10.08 |