[JPA] deleteAll() vs deleteAllInBatch

limhyeonwoo·2023년 3월 30일
0

이 글에서는 deleteAll()과 deleteAllInBatch()를 비교해보고자 합니다.

1. 메서드 직접 확인해보기

1) deleteAll()

위와 같이 deleteAll()은 삭제할 모든 엔티티에 대해서 for문을 돌려서 하나하나 제거하는 방식을 택한 메서드입니다.

2) deleteAllInBatch()

deleteAllInBatch()에대한 설명을 읽어보면 삭제할 모든 엔티티를 단하나의 쿼리로 삭제한다고 설명되어있습니다. 직접 확인해보겠습니다.

삭제할 모든 엔티티를 하나의 sql문으로 쿼리를 날려 삭제하는것을 확인할수 있습니다.

2. 직접 SQL문 쿼리 확인하기

1) deleteAll()


해당 코드를 보면 3개의 카테고리라는 엔티티를 저장하고 모두 삭제하는 테스트 코드입니다. 위 테스트 실행시 발생하는 delete쿼리문을 확인해보겠습니다.

3개의 엔티티를 삭제하는 과정에서 총 3개의 delete쿼리문이 나가는 것을 확인할수 있습니다.

2) deleteAllInBatch()


첫번째 테스트와 동일하나 deleteAllInBatch()를 사용했습니다. 위 테스트 실행시 발생하는 delete쿼리문을 확인하겠습니다.

3개의 엔티티를 삭제하는 과정에서 단 1개의 delete 쿼리문이 나가는 것을 확인할수 있습니다.

3. 결론

deleteAll()과 deleteAllInBatch()는 기능은 동일하나 날리는 delete 쿼리수에 차이가 있음을 확인할수 있습니다. 그러므로 성능상 deleteAllInBatch()가 우수하므로 deleteAllInBatch()를 사용하는것이 타당하다는 생각입니다.

감사합니다.

profile
안녕하세요

0개의 댓글