티스토리 뷰

대량의 데이터를 MS-SQL에 인서트 시킬때.

Bulk Insert 를 사용해서 인서트를 해보자.

일반 인서트보다 속도가 어마어마하게 빠를테니.


벌크인서트는 DataTable 이나 StreamReader 클래스를 사용해서 쓸수 있는데

본 포스팅에서는 DataTable을 이용해서 인서트를 한다.


우선 샘플 데이블 구조는 아래와 같다. 아주 간단하게 TEXT 컬럼에 데이터를 백만건을 넣어보자.

CREATE TABLE [dbo].[BULK](

[TEXT] [varchar](50) NULL

) ON [PRIMARY]


소스

  1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Data;
   4:  using System.Data.SqlClient;
   5:  using System.Linq;
   6:  using System.Text;
   7:  using System.Threading.Tasks;
   8:   
   9:  namespace BulkInsert
  10:  {
  11:      class Program
  12:      {
  13:          static void Main(string[] args)
  14:          {
  15:              long start_time;
  16:              long end_time;
  17:   
  18:              start_time = DateTime.Now.Ticks;
  19:              using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=SampleDb;User ID=sa;Password=@@@@"))
  20:              {
  21:                  sqlconn.Open();
  22:   
  23:                  DataTable dt = new DataTable("[BULK]");
  24:                  DataColumn col = new DataColumn();
  25:                 // col.DataType = Type.GetType("string");
  26:                  col.ColumnName = "TEXT";
  27:   
  28:                  dt.Columns.Add(col);
  29:   
  30:                  for (int i = 0; i < 1000000; i++)
  31:                  {
  32:                      DataRow dr = dt.NewRow();
  33:                      dr["TEXT"] = i + " 번째 값";
  34:                      dt.Rows.Add(dr);
  35:                  }  
  36:   
  37:                  using (SqlBulkCopy s = new SqlBulkCopy(sqlconn))
  38:                  {
  39:                      s.DestinationTableName = dt.TableName;
  40:                      s.ColumnMappings.Add("TEXT", "TEXT");
  41:                      s.WriteToServer(dt);
  42:                  } 
  43:              } 
  44:   
  45:              end_time = DateTime.Now.Ticks;
  46:   
  47:              TimeSpan timespan = new TimeSpan(end_time - start_time);
  48:              Console.WriteLine(timespan.Seconds.ToString()); 
  49:   
  50:              Console.Read();
  51:          }
  52:      }
  53:  }

WriteToServer 에 DataTable 객체나, StreamReader 객체를 넣어주면 된다.


실제로 아래 백만건의 텍스트를 MS-SQL에 저장하는데 걸린 시간이다. 7초!!!!!!!!!



벌크인서트, 대량인서트, 백만건, Bulk Insert, MS-SQL BULK, 벌크 인서트, BulkInsert, .NET, C#

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함