update api를 만들어두지 않아 긴급하게 하려다보니 쿼리문이 나왔다. mapper의 insert함수에
description 데이터가 없으면 insert, 있으면 update하는 로직으로 쿼리를 짰다.
함수를 두개 만들어 두 번 호출하는것과 성능차이가 어떤지 찾아보았다.
"데이터가 있으면 Update, 없을경우 Insert"
DB와 관련된 프로그램을 개발하다 보면 한번씩 만나는 경우이다. 이 경우 세 가지 방법으로 구현할 수 있다.
1. SELECT문으로 데이터가 존재하는지 확인 -> 리턴값에 따라 INSERT / UPDATE => 결국 디비에 두번 접근하는 비용, 그리고 INSERT 가 UPDATE, SELECT 보다 실행 속도가 빠른 걸 생각하면 좋은 방법이 아니다
2. UPDATE를 먼저 해본 후 리턴값에 따라 INSERT => UPDATE 리턴값이 0이라면 데이터가 존재하지 않는 것이기 떄문에 INSERT를 수행한다.
3. ON DUPLICATE KEY UPDATE => - 서버에 불필요하게 왔다갔다 할 필요가 없어짐
- 5-6% 정도 빠름
- 데이터 입력이 많다면 더 커질 수 있음
결국 2번이나 3번 방법 중 하나를 골라야 한다.
이때 update가 자주 일어나는 서비스이면 2번을 선택한다.
Insert가 자주 일어나는 서비스이면 3번을 선택하여 사용한다.
즉 여기선 2번을 선택하는 것이 옳다. 바꾸자
'SSHJ' 카테고리의 다른 글
Unable to retrieve the requested metadata (/latest/user-data/) 오류 (0) | 2020.11.23 |
---|---|
11/23 - boaform/admin/formlogin RCE 취약점 공격 (2) | 2020.11.23 |
Could not resolve pointer 스웨거 오류 (0) | 2020.11.19 |