[ SQL ] INSERT와 BULK INSERT의 차이, Infile Load 방식에 대해
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문을 통해 데이터베이스에 데이터를 삽입할 때 유리 (애플리케이션 내에서 동적 데이터 삽입, 로그 데이터 파싱 후 분석 등)