티스토리 뷰
수만~수십만 행의 데이터를 insert하는 C# 프로그램을 개발한다고 가정해 보죠.
트랜잭션을 걸고 for문 돌면서 insert 쿼리 날리면 어마무시한 시간이 걸립니다. 최근 테스트한 바로는 내부 네트워크로 연결된 MS-SQL에 3만줄의 데이터를 입력하는데 3분정도가 걸렸던 것 같습니다. 너무 느립니다. 앞으로 5만줄, 10만줄이 될 수도 있는데 어쩌나 하며 구글링...
그리고 SqlBulkCopy라는 놈을 발견합니다. 이름에서 보듯 벌크로 데이터를 인서트할 수 있는가 봅니다...이놈은 MS-SQL전용이라 OleDb를 지원하지 않습니다. OleDb에서 트랜잭션을 열고 SqlBulkInsert를 OleDb 트랜잭션 하위에 둘수는 없습니다. 벌크인서트 자체가 MSSQL에만 적용가능하니 그런듯..
아무튼 사용법은 아래와 같습니다.
1. SqlCommand 를 열고 트랜잭션 생성
2. 벌크인서트 전에 다른 여러 SQL구문 처리
3. 인서트할 테이블 구조와 동알한 DataTable 생성 및 데이터 입력
4. SqlBulkCopy.WriteToServer()함수 수행 후 close()
간단하죠? ㅎㅎ
3분걸리던 입력시간이... 3초로 줄었습니다.+_+ (네트웍환경이 안좋은 원격지라면 시간이 좀 더 걸리겠죠?)
'개발' 카테고리의 다른 글
c# if DEBUG 와 Conditional("DEBUG")의 차이점 (0) | 2018.07.24 |
---|---|
c# string Split 응용 - KeyValuePair<>를 통해 인덱스 추가하기 (0) | 2018.02.05 |
c# if 문 or 연산 중복 제거하기 (0) | 2017.07.12 |
64bit 컴퓨터에서 32bit 오라클 OLEDB 드라이버 로드하기 (0) | 2016.06.10 |
c# listview item 사라짐(disappear) 현상 해결방법 (0) | 2015.06.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 루드위지아 오발리스
- 채리새우
- 산세베리아
- 캠핑
- 쿠바펄
- 루드위지아
- 편도수술
- 수초어항
- 장기전세
- 금연
- 하이그로필라
- 오토씽
- 램즈혼
- ixus75
- 마곡지구
- 아쿠아스카이
- C/C++
- ADO
- NAS
- 노랭이새우
- 레인보우샤크
- 133인치
- Mpow
- 챔픽스
- 미에어2
- 미니헤어그라스
- 네온테트라
- simpleAdo
- 시내랑
- 소설
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함