본문 바로가기
DB

전체 데이터 삭제 DELETE vs TRUNCATE

by suhsein 2024. 8. 25.
728x90

DELETE vs TRUNCATE

DELETE에 조건을 주지 않는 것과 TRUNCATE는 같은 기능을 한다.
둘 다 테이블 구조를 남기지만 내부 데이터를 모두 삭제하게 된다.
그럼에도 TRUNCATE의 성능이 DELETE보다 좋은 이유는 무엇인지 차이점을 비교해보자.

작동 방식의 차이

DELETE

약 O(N)의 작업 시간

 

DELETE는 데이터를 한 행씩 삭제한다. 행을 삭제하기 전에 로그를 남기고 해당 행에 대한 트랜잭션 로그를 작성한다.
이로 인한 장점은 롤백이 가능하다는 것이다.


그러나 로깅 및 트랜잭션 관리를 위한 추가적인 오버헤드가 발생하게 된다.
또한 AUTO_INCREMENT 값에 대해 삭제된 행들을 리셋하지 않는다.(이전 값부터 증가)

TRUNCATE

약 O(1)의 작업 시간

 

TRUNCATE는 로깅 및 트랜잭션 로그를 작성하지 않으며, 한 행씩 삭제를 하지 않고 모든 데이터를 삭제하여 테이블을 초기 상태로 되돌린다. 그렇기 때문에 대량의 데이터를 삭제할 때 빠른 삭제가 가능하다는 장점이 있다. 하지만 롤백이 불가능하기 때문에 DELETE에 비해서 위험성이 있다.


또한 AUTO_INCREMENT 값에 대해 삭제된 행들을 리셋하며, 첫번째 행부터 다시 시작한다.(초기값부터 증가)

결론

롤백 가능성이 있는 작업의 경우 DELETE를, 롤백이 필요 없는 대량 데이터 삭제에 대해서는 TRUNCATE를 사용하는 것이 성능에 유리하다.

728x90

'DB' 카테고리의 다른 글

VARCHAR vs CHAR  (0) 2024.08.25
인덱스  (0) 2024.08.25
문자열 인덱스, like문 주의사항  (0) 2024.08.25
SQL 정리  (0) 2024.08.25
DB 개념 6편 - ER 모델  (0) 2024.08.25