SQL
MERGE
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Database
Merge #
소개 #
Merge 문은 소스의 데이터를 사용하여(테이블 참조의 결과) 대상을 갱신 혹은 삽입한다. 조건에 일치하는 대상의 행은 지정된 대로 삭제 및 갱신할 수 있고 대상에 존재하지 않는 행은 삽입할 수 있다.
사용법 #
SQL:2003에서 표준구문으로 도입된 방식을 사용하되 데이터베이스 제품에 따라 표준구문 등록을 하지 않은 일부는 제공하는 유사한 기능(비표준 구문)을 따른다.
표준구문 #
- Oracle Database
- DB2
- Microsoft SQL Server
-
Firebird
MERGE INTO 테이블 USING 서브 테이블 ON (조건) WHEN MATCHED THEN UPDATE SET 칼럼 1 = 값 1 [, 칼럼 2 = 값 2 ...] WHEN NOT MATCHED THEN INSERT (칼럼 1 [, 칼럼 2 ...]) VALUES (값 1 [, 값 2 ...])
비표준 구문 #
-
MySQL
INSERT INTO 테이블(칼럼 1 [, 칼럼 2 ...]) VALUES(값 1 [, 값 2 ...]) ON DUPLICATE KEY UPDATE 컬럼1 = '값 1' [, 칼럼 2 = '값 2'...]
-
SQLite
INSERT OR REPLACE INTO 테이블 (칼럼 1 [, 칼럼 2...]) VALUES (값 1 [, 값 2 ...])
주의사항 #
- 표준구문의 USING 절에는 Merge 대상 테이블이 단독으로 올 수 없다. 오직 다른 테이블을 참조하거나 함께 조인하여 사용해야 한다.
- Trigger 발생이 되지 않는다.
-
데이터가 많은 대용량 테이블에선 CPU 점유율이 높아 오히려 성능이 떨어질 수 있으며 단순한 삽입/갱신의 명령문보다 복잡한 명령문에서 사용하는 것이 이상적이다. 아래의 데이터를 통해 대용량 테이블에서 Merge와 단순 DML 명령문을 실행했을 때의 상태 차이를 확인할 수 있다.
Merge
- logical read : 4,516,795
- time : 39sec
Simple DML
- logical read : 203,037
- time : 28sec