본문 바로가기
데이터베이스

[MYSQL] LOAD DATA INFILE 대량 데이터 INSERT

by SoonNote 2023. 12. 4.
반응형
LOAD DATA INFILE 이란?

  - 파일을 읽어 테이블로 데이터를 입력하는 명령어이다. 한번에 많은 데이터를 입력해야 할 때 주로 사용된다.

 

다량의 데이터를 테이블에 insert하기위해 방법을 검색하던 중 INSERT문 보다 20배정도 빠르다는 LOAD DATA INFILE 이라는 것을 발견하였다.

 특정 파일을 지정하고 옵션을 추가해줘서 insert문을 실행할 수 있다.

LOAD DATA INFILE '/home/test/soondev/test.txt' 
REPLACE INTO TABLE test_table 
FIELDS 
	TERMINATED BY '|' 
LINES 
	TERMINATED BY '\n' 
(a, b, c, d, e, f, g, h, i);

두 번째 줄에 REPACE 옵션과 IGNORE 옵션을 사용 할 수 있다.

 - REPLACE : 중복 레코드 발생시 새로 입력되는 레코드로 덮어쓴다.

 - IGNORE : 중복 레코드 발생시 새로 입력되는 레코드를 무시한다.

 

세 번째 줄은 파일안에 들어가는 컬럼들을 구분 할 문자를 지정하는 것이다.

 - ex) a|b|c|d 라고 한다면 INSERT INTO test_table ('a','b','c','d') 가 되는 것

 

다섯 번째 줄은 다음 줄로 넘어가는 문자를 지정하는 것이다.

 - ex)

a|b|c|d

c|c|c|c
 가 있다면 \n으로 구분하여 INSERT INTO test_table ('a','b','c','d'),('c','c','c','c') 가 된다

 

마지막 줄은 들어갈 컬럼 수를 지정한다.

 

LOAD DATA INFILE은 10000건 이상부터 체감이 잘 되는 명령어라고 생각된다.

 

 

실제로 사용해보자

 

 

리눅스 mariadb 실행 버전은 10.7.8

사용할 파일은 130M .txt 파일이며 안에 들어가있는 내용은

data1|data2|data3|data4|data1|data2|data3|data4
data1|data2|data3|data4|data1|data2|data3|data4
data1|data2|data3|data4|data1|data2|data3|data4
data1|data2|data3|data4|data1|data2|data3|data4

위 형태로 들어가 있다.

 

 

사용할 테이블을 만들고

test_table

테이블 명은 test_table

 

LOAD DATA INFILE '/home/파일위치/파일이름.txt' 
REPLACE INTO TABLE test_table 
FIELDS 
	TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
	(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);

위 명령어를 실행해주면

약 70만건의 데이터가 들어갔고 mysql workbanch에서 확인을 해보면

위명령어에 사용했던 REPLACE가 적용되서 중복발생 9만건정도를 제외하고 60만건이 들어온 것을 확인 할 수있다.

 

리눅스에서 LOAD DATA INFILE 명령어를 사용했을때 30초도 걸리지 않았던것 같다.

반응형