그래서 일부 판매 데이터를 MySQL 데이터베이스로 가져 오려고합니다. 데이터는 원래 원시 CSV 파일의 형태로되어 있습니다. PHP 응용 프로그램은 먼저 처리 한 다음 처리 된 판매 데이터를 데이터베이스에 저장해야합니다.대량 데이터를 MySQL에 가져 오기
처음에는 개별적으로 INSERT
개의 쿼리를 수행했는데, 이는 매우 비효율적이었습니다 (~ 6000 개의 쿼리는 거의 2 분). 그런 다음 하나의 큰 쿼리를 생성하고 INSERT
데이터를 한 번에 모두 편집했습니다. 이로 인해 효율성이 3400 % 향상되었고 문의 시간이 3 초으로 바로 넘어졌습니다.
그러나 이해할 수 있듯이 LOAD DATA INFILE
은 INSERT
검색어보다 훨씬 빠릅니다. 이제 처리 된 데이터를 텍스트 파일에 쓰고 LOAD DATA INFILE
을 사용하여 데이터베이스로 가져 오려고합니다. 데이터베이스에 많은 양의 데이터를 삽입하는 최적의 방법입니까? 아니면 완전히 잘못된 방향으로 가고 있습니까?
대부분 숫자 데이터의 수천 행이 사물의 웅장한 계획에별로 없지만이 인트라넷 응용 프로그램을 가능한 한 신속하게 만들려고 노력하고 있습니다. 또한 프로그램을 다른 회사에 라이센스하기로 결정한 경우이 프로세스가 확장되도록하고 싶습니다.
UPDATE :
그래서 내가 가서 않았고 제안 (지금 두 번 디스크에 동일한 데이터를 기록 이후) 시험 LOAD DATA INFILE
가 생각이 나에게 유일한 한계 속도가 증가를 줄 수도에서,하지만 난이었다 쿼리 시간을 3300ms 이상에서 ~ 240ms로 줄 였을 때 놀랐습니다. 이 페이지는 총 실행에 약 1500ms가 걸리지 만 여전히 이전보다 훨씬 눈에 띄게 좋습니다.
데이터베이스에서 불필요한 인덱스가 있는지 확인하고 InnoDB 테이블 2 개를 제외하고 전체 성능을 최적화하기 위해 InnoDB 버퍼 풀을 최적화합니다. .
나는이 질문이 몇 달 전에 게시되었음을 알고 있지만, 일괄 INSERT와 LOAD DATA INFILE 간의 차이점은 시간을 절약 할 수 있다고 말해야합니다. 나는 INSERT로 30 초/그 이상을 30 컬럼 CSV 파일로 ~ 11000 라인을로드하는 약 10 초로 옮겼다. –