CSV 파일을 직접 MySQL 테이블로 Import 하는 방법

대용량 파일을 MySQL에 업로드할 때 속도 향상 팁

MySQL 테이블에 데이터를 넣을 때 여러가지 방법이 있는데 CSV(Comma-separated values) 파일을 직접 넣는 방법도 있습니다.

알반적인 경우

CSV 파일과 DB 테이블 구조가 일치하면 아래와 같이 입력하면 됩니다.

1-- load file
2LOAD DATA LOCAL INFILE "filePath" 
3INTO TABLE dbName.tableName FIELDS TERMINATED BY ",";

파일 구조와 테이블 구조가 다른 경우

만약 CSV 파일 구조와 DB 테이블 구조가 다른 경우에는 조금 복잡한데 아래 샘플 sql 문 참조해서 import 해보시길 바랍니다. 파일을 기준으로 테이블의 컬럼을 적어주면 됩니다(마지막 줄).

1LOAD DATA LOCAL INFILE "filePath" 
2INTO TABLE dbName.tableName
3FIELDS TERMINATED BY ','
4ENCLOSED BY '"'
5LINES TERMINATED BY '\n'
6(column1,column2,column3, ...);

대용량 파일의 경우

만약 파일의 크기가 크고 테이블에 index가 걸려 있으면 시간이 굉장히 오래 걸릴 수 있습니다. 그럴 경우에는 아래와 같이 index를 먼저 해제해 주고 파일을 올린 다음 다시 index를 걸면 상당히 빠르게 테이블에 데이터를 넣을 수 있습니다.

1-- disable index
2ALTER TABLE dbName.tableName DISABLE KEYS;
3
4-- load file
5LOAD DATA local INFILE "filePath" 
6INTO TABLE dbName.tableName FIELDS TERMINATED BY ",";
7
8-- enable index
9ALTER TABLE dbName.tableName ENABLE KEYS;

환경에 따라 다를 수 있지만 제가 테스트했을 때 대략 2GB 정도 되는 파일이 10분 정도에 import가 완료됐습니다.