Upsert vs Unique key constraint
누가 더 부하가 적을까?
- 데이터베이스 부하를 줄이는 경우 일반적으로 고유 제약 조건이 있는 삽입 대신 upsert를 사용하는 것이 좋습니다. 고유 제약 조건이 있는 삽입을 사용할 때 데이터베이스는 새 데이터를 삽입하기 전에 트랜잭션 ID가 이미 존재하는지 먼저 확인해야 하기 때문입니다. 이 검사는 특히 많은 수의 레코드를 처리할 때 리소스를 많이 사용할 수 있습니다.
반면 병합 작업이라고도 하는 upsert 작업은 삽입 및 업데이트 작업을 단일 문으로 결합합니다. 레코드가 이미 있으면 업데이트되고 없으면 삽입됩니다. 이 접근 방식은 레코드의 존재 여부를 별도로 확인하는 오버헤드를 방지하여 성능에 도움이 되고 데이터베이스 부하를 줄일 수 있습니다.
- 또한 경우에 따라 배치 삽입을 사용하는 것이 upsert보다 더 나은 접근 방식일 수 있습니다. 일괄 삽입을 사용하면 개별적으로가 아니라 한 번에 여러 레코드를 삽입하므로 더 효율적이고 데이터베이스의 전체 로드를 줄일 수 있습니다.
- 물론 해당 테이블의 특정 컬럼들의 데이터 크기가 매우 크다면 upsert는 무거운 작업이 될 수 있습니다만, 해당 과제에서는 고려하지 않아도 된다고 판단됩니다.
- 그러므로 Upsert와 batch insert를 혼합하여 아래와 같은 방식의 쿼리를 쓰는 것이 좋겠습니다.