인지용

Mysql load data local infile 방법 대용량 인서트 본문

정보들

Mysql load data local infile 방법 대용량 인서트

인지용 2022. 1. 26. 12:46

 

대용량 데이터 insert시 for문은 시간이 매우 오래걸립니다.

그때 사용할 수 있는 방법이 LOAD DATA LOCAL INFILE 입니다.

 

직접 sql 쿼리를 작성하는게 아니고

텍스트 파일을 읽어서 테이블로 데이터를 저장하는 명령어입니다.

 

 

저는 txt 파일 생성은 이클립스에서,

명령어 사용은 MysqlWorkbench에서 했습니다.

 

순서

1. 

SET GLOBAL local_infile=1;

load data local infile 활성화

 

 

 

2. 이클립스에서 반복문으로 insert 할 데이터 txt 파일 만들기

package test;

import java.io.*;

public class Main {							
	public static void main(String[] args) throws IOException {
						
        try {

            File file = new File("txt 파일 생성할 폴더 경로");

            // 예시
            // File file = new File("/Users/min/Documents/bigdata.txt");

            if (!file.exists()) {
               file.createNewFile();
            }

			FileWriter fw = new FileWriter(file);
			BufferedWriter writer = new BufferedWriter(fw);	
            	
			// 테이블에 저장할 값
            // 카테고리, 색상, 상품이름, 사이즈, 가격, 판매상태		
			for(int i = 0; i < 1000000; i++) {
				writer.write("top, blue, bigdata, L, 15000, onsale\n");
			}
			
			writer.close();				
			System.out.print("성공");
            
		}catch (IOException e) {
			System.out.print("실패");
		}				
	}		
}

 

 

 

3. Mysql workbench에서 load data local infile 사용하기

LOAD DATA LOCAL INFILE '/Users/min/Documents/bigdata.txt'
        into table 테이블이름        
        fields
        terminated by ', ' optionally enclosed by '"'
        lines terminated by '\n'              
        (category, color, item_name, size, price, sale_status, @created_date)
        set created_date = now();

 

 

4. 

SET GLOBAL local_infile=0;

 

load data local infile 비활성화

 

 

 

'정보들' 카테고리의 다른 글

스프링부트 초반 셋팅 방법  (0) 2022.01.26
자바 is a 관계와(상속관계) has a 관계(포함관계)  (0) 2022.01.21
메모리란  (0) 2021.08.27
java UUID란  (0) 2021.08.25
java MultiValueMap 이란  (0) 2021.08.24