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

2024. 8. 12. 13:35·🌥️Cloud Study🌥️/Etc

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문을 통해 데이터베이스에 데이터를 삽입할 때 유리 (애플리케이션 내에서 동적 데이터 삽입, 로그 데이터 파싱 후 분석 등)

 

'🌥️Cloud Study🌥️ > Etc' 카테고리의 다른 글

[ Logging ] Log Reporting, 이메일로 로그 전송하기  (0) 2024.08.13
[ Logging ] 어플리케이션 로그 DB에 적재하기  (0) 2024.08.13
[ 모니터링 ] Prometheus Federation 설정  (0) 2024.08.12
[ RDS ] 쉘 스크립트에서 MySQL 연결하여 DB에 데이터 입력하기  (0) 2024.08.12
[ Logging ] 서버 내 로그 관리 정책 수립 및 구현  (0) 2024.08.09
'🌥️Cloud Study🌥️/Etc' 카테고리의 다른 글
  • [ Logging ] Log Reporting, 이메일로 로그 전송하기
  • [ Logging ] 어플리케이션 로그 DB에 적재하기
  • [ 모니터링 ] Prometheus Federation 설정
  • [ RDS ] 쉘 스크립트에서 MySQL 연결하여 DB에 데이터 입력하기
L_Chae
L_Chae
🎮😻🤓🖥✨
  • L_Chae
    Cherish
    L_Chae
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🌥️Cloud Study🌥️
        • AWS
        • NHN
        • KT
        • Microsoft (Azure 900)
        • TroubleShooting
        • IaC
        • Etc
      • STUDY
        • English
        • Japanese
        • 개인정보보호 관련
      • 초등학교 AI 교육 진행
        • 2024학년도 1학년-2학년
        • 2025학년도 4학년
      • 2024 KDT 📕
        • Lecture
        • Study 📗
        • Study-JAVA
        • Project
        • etc
      • INTERLUDE ✦
        • 2022 SYSTEM STUDY
        • 2022 Winter Study
        • 2023 AutoMobility STUDY
        • 2023 Summer Study (CPPG)
        • 2023 Reversing STUDY
        • etc
      • Private🔒
        • MacBook 💻
        • Screenshot 🩷
        • Photo 🖼️
        • FFXIV - Backup 🎮
        • Tistory
      • PBL 📗
        • 논문 스터디
        • Backup
      • Project 🖤
        • 2022-2) 개인정보보호 소학회
        • 2022-2) winter GURU2 - iOS
        • 2023-1) PBL 3
        • 2023-2) PBL 4
        • 2024-1) SW-AI교육 실습 일지
      • CTF 🚩
        • 2022
        • 2023
      • News scrap 📰
        • 2022
        • 2023
      • 2022 공부 로그 🐯
      • 2023 공부 로그🐰
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ansible
    JLPT N1
    멱등성
    ansible galaxy
    JLPT
    deprecation warning
    content collection
    jlpt n1 도전기
    N1
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
L_Chae
[ SQL ] INSERT와 BULK INSERT의 차이, Infile Load 방식에 대해
상단으로

티스토리툴바