일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 시스템설계방법
- 시스템설계면접예시
- 헤드퍼스트전략패턴
- 가상면접3장
- formik react-query submitting not working
- Git commit 합치기
- git commit 협업
- 리액트구글애널리틱스
- cypress React
- 리팩터링2판테스트
- git commit merge
- cypressBDD
- react
- 시스템설계면접
- 테스트코드책
- formik submitting not working
- 가상면접2장
- gitsquash
- 가상면접으로대규모시스템
- 시스템설계면접팁
- s3이미지다운로드됨
- git squash
- react-ga
- awss3
- 시스템설계
- FirebaseAnalytics
- 전략패턴
- 디자인패턴
- file not found Error
- 리팩토링2판4장
- Today
- Total
mingg IT
[JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() 차이점 본문
1. deleteAll()
userRepository.deleteAll(userRepository.findAllById(Lists.newArrayList(1L,3L)));
userRepository.findAll().forEach(System.out::println);
우선 첫번째 Select문같은 경우에는 findAllById로 인해 in 절로 select를 해온 이후 1번, 3번이 존재하는지 확인 한다.
(deleteAll에서 argument를 주지않았을 경우에도 동일함. )
이후 delete로 해당 id를 하나하나 있는지 검사하면서 지운다. 이로인해 deleteAll()은 성능이슈로 인해 거의 사용하지 않는다.
대용량의 데이터가 있을경우 for문을 하나하나 돌면서 사용하기 때문에
보통 천만건이 넘는 것을 사용할 경우 deleteAllInBatch를 사용한다.
1-1 deleteAll()
userRepository.deleteAll();
userRepository.findAll().forEach(System.out::println);
id갯수만큼 모두 for문을 돌며 delete 쿼리문을 수행하는 것을 확인할 수 있다.
2. deleteAllInBatch
userRepository.deleteAllInBatch();
userRepository.findAll().forEach(System.out::println);
findAll이나 findById를 사용하지 않았기 때문에 delete이전에 select하는 과정은 없고 해오지 않고 오로직 delete만 한다.
대용량일 수록 우수한 성능을 낼듯.
3. deleteInBatch
userRepository.deleteInBatch(userRepository.findAllById(Lists.newArrayList(1L,3L)));
userRepository.findAll().forEach(System.out::println);
그렇다면 deleteInBatch는 어떠한 차이점이 있을까 ?
마찬가지로 findById로 인해 in절로 1번 3번이 있는지 읽어온다.
허나 deleteAll() 과는 다르게 delete쿼리에서 id를 or ? 로 확인한다.
argument를 주어도 for문을 전부돌며 select해오지 않는것임.
entity에 값이 있던지 없던지 바로 delete쿼리를 날리는것.
즉 deleteAll, deleteInBatch, deleteAllInBatch
실제로 for문을 전부 돌며 select를 해오느냐, iterable로 하나하나 확인하며 지우느냐, 아니면 쿼리한번으로 모두 지우느냐 차이이다.
'BackEnd' 카테고리의 다른 글
[Jpa] @transactional 격리수준과 전파속성 (0) | 2021.12.26 |
---|---|
[JPA] 영속성 컨텍스트 와 EntityManager (0) | 2021.12.24 |
[Spring] AOP custom annotation 사용하기 (0) | 2021.11.18 |
[Spring] 내가 보기 위해 만드는 편리한 annotation 모음 (0) | 2021.11.18 |
[Spring] 스프링 log level 변경하기 (0) | 2021.11.17 |