2014-03-28 4 views
0

22000 행의 CSV 파일이 있습니다. 처음 엔 csv 파일에서 모든 행을 읽고 엔티티 프레임 워크 db.SaveChanges()을 사용하여 데이터베이스에 추가합니다. 저장 변경은 45 초가 걸립니다. 다음에 모든 레코드를 읽고 새 레코드를 추가하고 기존 레코드를 업데이트하면 2 분이 걸립니다. 대량 레코드를 삽입하는 가장 좋은 방법은 무엇입니까?업데이트가 오래 걸리는 이유

+1

새 레코드 만 추가하고 기존 레코드를 업데이트 할 때는 단순히 22,000 개의 레코드를 삽입하는 것보다 훨씬 많은 작업을 수행해야합니다. –

+0

csv 파일에 새 행을 추가하거나 새 csv에서 새 행을 선택합니까? –

+3

SQL Server의 준비 테이블에 모든 행을 대량 삽입 한 다음 거기에 업데이트, 삽입, 삭제 작업을 수행하십시오. 삽입/대량 삽입 실제 테이블에 직접 데이터를 삽입하지 마십시오. CSV 파일에는 모든 종류의 가비지 데이터가있을 수 있습니다. –

답변

0

EF로 저장할 때 세 가지 다른 동작이 발생하며 속도가 매우 다릅니다. 삽입 및 삭제는 SQL Server에 대한 단일 호출에서 수행되지만 업데이트는 동시성 문제를 확인하고 어떤 엔티티가 실패했는지 다시보고 할 수 있도록 한 번에 하나의 레코드에서 수행됩니다.

EF를 계속 사용하려면 서버에서 항상 INSERT 및 MERGE (SQL 명령)를 수행해야합니다. 저장 프로 시저를 생성 할 능력이 없다면 C#의 sql 명령에서 MERGE를 수행 할 수도 있습니다.

가장 좋은 옵션은 가능한 경우 BULK INSERT를 사용하는 것입니다.

관련 문제