DuckDB INSERT 문

DuckDB INSERT 문

INSERT 구문은 관계형 데이터베이스에 데이터를 적재하는 표준 방식이에요. INSERT 구문을 쓰면 값을 행 단위(row-by-row)로 공급하는데, 단순하긴 하지만 개별 INSERT 구문을 파싱하고 처리하는 데 드는 오버헤드가 상당해요. 그래서 행 하나씩 넣는 작업을 아주 많이 반복하면 대량 삽입 입장에서는 굉장히 비효율적이 됩니다.

Best practice 경험상 좋은 기준은, 몇 개 이상의 행을 넣을 때 개별 INSERT 구문을 아주 많이 쓰는 걸 피하는 거예요. 즉 루프 안에서 INSERT 구문을 쓰는 걸 피하라는 뜻이죠. 대량으로 데이터를 넣을 땐 한 구문으로 넣는 데이터량을 최대한 키우는 게 좋아요.

만약 어쩔 수 없이 루프 안에서 INSERT 구문으로 데이터를 적재해야 한다면, auto-commit 모드로 실행하는 건 피하세요. 커밋이 일어날 때마다 데이터베이스는 손실을 막기 위해 변경 내용을 디스크에 동기화해야 해요. auto-commit 모드에선 모든 구문이 각각 별도의 트랜잭션으로 감싸지기 때문에, 구문마다 fsync가 호출됩니다. 대량 적재에서는 보통 이게 전혀 필요하지 않으면서 프로그램을 크게 느려지게 만들어요.

Tip 정말 루프 안에서 INSERT 구문을 써야 한다면, BEGIN TRANSACTIONCOMMIT으로 감싸서 실행하세요.

구문 (Syntax)

INSERT INTO로 테이블에 데이터를 적재하는 예시는 다음과 같아요.

CREATE TABLE people (id INTEGER, name VARCHAR);
INSERT INTO people VALUES (1, 'Mark'), (2, 'Hannes');

문법 다이어그램과 함께 더 자세한 설명은 INSERT 구문 페이지에서 확인할 수 있어요.

더 알아보기 (Learn more)