2013-06-04 3 views
1

2400 만 행의 2GB csv 파일을 SQL Server로 자주 가져옵니다. 이것을 텍스트로 가져온 다음 SELECT xxx INTO를 통해 변환을 수행합니다.업데이트 쿼리를 분할하면 성능이 향상됩니까?

데이터의 다른 섹션에서이를 별도의 쿼리로 분할하면 변환시 메모리 사용이 줄어 듭니까? 여기에 지정된

답변

3

솔직히 말해서, 전혀 그 방법을 사용하는 대신 대량 삽입을 사용하지 않는 것이 더 좋을 수 있습니다

Handling Bulk Insert from CSV to SQL

그것은 비록 매우 간단합니다 :

BULK INSERT dbo.TableForBulkData 
FROM 'C:\BulkDataFile.csv' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 

C#을 통해 작업하는 경우 SqlBulkCopy 라이브러리를 사용하거나 명령 줄에서 처리해야하는 경우 항상 BCP를 사용할 수 있습니다. 기사

QUOTE :

주, 당신이 현재 사용하고있는 방법은 최대 10 배 느린

데이터는 사용하여 CSV 파일에서 데이터베이스에 삽입 할 수

종래의 SQLCommand 클래스. 그러나 이것은 매우 느린 과정입니다. 이미 논의한 다른 세 가지 방법과 비교했을 때,이 과정은 적어도 10 배 더 느립니다. 행별로 CSV 파일을 반복 실행하지 않고 모든 행에 대해 SqlCommand를 실행하여 CSV 파일에서 SQL Server 데이터베이스로 대량의 날짜를 삽입하는 것이 좋습니다.

+0

감사합니다. 나는 이것을 장래 고려할 것이다. 내가 겪은 것은 구체적인 질문에 대한 대답입니다. 이 방법으로 테이블을 작성하면 많은 양의 RAM 또는 디스크 공간이 사용됩니까? SQL은 행 단위로 SELECT INTO를 처리합니까? 아니면 출력 테이블을 만들기 전에 입력 데이터의 끝에 도달해야합니까? –

+0

SQL은 전체 쿼리를 컴파일해야하므로 CSV 파일을로드하고 쿼리를 처리하는 데 필요한 메모리가 엄청납니다. 파일을 스트리밍하는 것이 훨씬 좋습니다. – KaraokeStu

+0

업데이트 쿼리에도 동일한 작업이 수행됩니까? 열을 = a * 2로 설정하여 테이블을 업데이트하면 데이터를 분할하여 더 나은 성능을 얻을 수 있습니까? –

관련 문제