🌥️Cloud Study🌥️/Etc

[ SQL ] INSERT와 BULK INSERT의 차이, Infile Load 방식에 대해

L_Chae 2024. 8. 12. 13:35

INSERT

개별 행 삽입
`INSERT`문은 한 번에 하나의 행을 데이터베이스에 삽입한다.

 

속도

각 `INSERT` 문이 데이터베이스에 대한 개별 트랜잭션으로 처리되기 때문에 성능이 저하될 수 있다.
특히, 많은 양의 데이터를 삽입할 때 성능이 크게 떨어질 수 있다.

 

# 구문 예시
INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2');

BULK INSERT

여러 행 삽입

`BULK INSERT`는 한 번에 여러 행을 삽입한다.

 

속도

대량의 데이터를 효율적으로 삽입할 수 있으며, 데이터베이스에 대한 트랜잭션 수가 줄어들어 성능이 크게 향상된다.
`INSERT` 문을 여러 번 사용하는 것보다 훨씬 빠르다.

 

# 구문 예시 (MySQL에서 여러 행 삽입)
INSERT INTO table_name (column1, column2) VALUES 
('value1', 'value2'),
('value3', 'value4'),
('value5', 'value6');

비용 측면에서의 금액적 차이

INSERT 사용 시 비용 :

많은 행을 개별 `INSERT`로 삽입하면 트랜잭션이 반복적으로 발생하고, 그로 인해 데이터베이스의 CPU, 메모리, 디스크 I/O 등의 리소스를 많이 소모하게 된다.

클라우드 환경에서는 이러한 리소스 사용이 늘어나면 데이터베이스 인스턴스의 비용이 증가할 수 있고,
사용량 기반의 비용 모델에서는 성능 저하로 인해 더 긴 시간이 소요되면 더 많은 비용이 발생할 수 있다.

 

BULK INSERT 사용 시 비용 :

`BULK INSERT`를 통해 여러 행을 한꺼번에 삽입하면 트랜잭션 수가 줄어들고, 데이터베이스 리소스 사용이 최적화된다.

대량 데이터 삽입 시에도 효율적으로 작업이 완료되어 리소스 사용이 줄어들고, 결과적으로 비용을 절감할 수 있다.


BULK INSERT의 단점

트랜잭션 관리의 복잡성

`BULK INSERT`는 한 번에 많은 행을 삽입하기 때문에, 하나의 트랜잭션이 매우 커질 수 있다.

트랜잭션이 커지면 롤백 시 리소스 소모가 커지고, 데이터베이스가 큰 부하를 받을 수 있다.

만약 삽입 도중 오류가 발생하면 많은 데이터를 롤백해야 하는 상황이 발생할 수 있다.

 

데이터 무결성 문제

개별 `INSERT`에서는 각 행이 독립적으로 처리되므로 한 행에서 오류가 발생하더라도 다른 행에 영향을 미치지 않는다.
그러나 `BULK INSERT`에서는 전체 작업이 하나의 큰 트랜잭션으로 처리될 수 있어, 오류가 발생하면 전체 삽입이 실패할 수 있다.


Infile Load

기능

`LOAD DATA INFILE`은 MySQL에서 대량 데이터를 삽입할 때 사용되는 방법으로, 외부 파일(.CSV 형식)을 직접 테이블에 로드한다.

 

속도

`LOAD DATA INFILE`은 데이터 파일을 테이블에 매우 빠르게 삽입할 수 있으며, `BULK INSERT`보다도 더 빠를 수 있다.

데이터가 이미 파일에 존재하고, 파일 형식이 MySQL 테이블의 스키마와 잘 맞는다면 가장 효율적인 방법이다.

 

# 구문 예시
LOAD DATA INFILE '/path/to/yourfile.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(column1, column2, column3);

 

  • FIELDS TERMINATED BY: 각 필드가 구분되는 방법을 지정 (ex: `,`로 구분된 CSV 파일).
  • LINES TERMINATED BY: 각 레코드(행)가 구분되는 방법을 지정 (ex: `\n`으로 구분된 행).

각 삽입 방법 별 인프라 예시

Infile Load : 대량 데이터 삽입에 최적 (빅데이터 처리, 로그 데이터 적재 등에 유리)

Bulk Insert : SQL문을 통해 데이터베이스에 데이터를 삽입할 때 유리 (애플리케이션 내에서 동적 데이터 삽입, 로그 데이터 파싱 후 분석 등)