유지보수 도중, 기존의 Row Query가 이해가 안가는 부분이 있어 생각하고 직접 사용해보며, 그 차이를 정리하고자합니다.

"INSERT ... ON DUPLICATE KEY UPDATE"  는 MySQL에서 사용되는 쿼리 구문
특정한 유니크 또는 프라이머리 키 제약 조건을 가진 테이블에 데이터를 추가하려고 할 때, 
이미 해당 키가 존재하면 기존 행을 업데이트하고 그렇지 않으면 새로운 행을 삽입함.
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, ...;

- table_name: 데이터를 삽입할 테이블의 이름
- (column1, column2, ...): 삽입될 열의 이름 목록
- (value1, value2, ...): 삽입될 값의 목록
- ON DUPLICATE KEY UPDATE: 유니크 또는 프라이머리 키 충돌 시 실행되는 업데이트 부분
- column1 = value1, column2 = value2, ...: 충돌 시 각 열에 대해 업데이트할 값을 지정

"INSERT IGNORE" 는 MySQL에서 사용되는 쿼리 구문, 데이터를 특정 테이블에 삽입하고 할 때,
유니크 또는 프라이머리 키 충돌 등의 이유로 삽입이 불가능한 경우 해당 행을 무시하고 계속 진행함.
INSERT IGNORE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

- table_name: 데이터를 삽입할 테이블의 이름
- (column1, column2, ...): 삽입될 열의 이름 목록
- (value1, value2, ...): 삽입될 값의 목록
- IGNORE: 유니크 또는 프라이머리 키 충돌이 발생하더라도 해당 행을 무시하고 진행


어떤 것을 어느 상황에서 사용해야할까요?
성능적인 측면에서 봤을 땐, 어떤 것이 더 좋을까요?

"INSERT ... ON DUPLICATE KEY UPDATE"
 - 중복된 키 충돌이 발생했을 때 업데이트를 수행하는 경우
 - 특정 열을 업데이트하거나 추가적인 처리를 수행하는 경우
 - 중복이 발생할때 마다 추가적인 업데이트 작업이 수행되므로 오버헤드가 발생할 수 있음

"INSERT IGNORE"
 - 중복된 키 충돌이 발생했을 때 무시하고 계속 진행하는 경우
 - 추가적인 업데이트 또는 변경이 필요하지 않은 경우
 - 중복 발생 시 단순히 무시하므로 추가적인 작업이 없어 성능이 위에보다 좋을 수 있음

+ Recent posts