網(wǎng)站建設(shè)數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫全攻略
2010/6/22 16:22:30

  有很多網(wǎng)站建設(shè)初期數(shù)據(jù)信息有限,不要強大的數(shù)據(jù)庫,當(dāng)網(wǎng)站有聲有色之后,就要將數(shù)據(jù)信息導(dǎo)入數(shù)據(jù)庫,那么如何將百萬條數(shù)據(jù)信息在最短的時間內(nèi)導(dǎo)入數(shù)據(jù)庫呢?以下是五種方法:
  注:數(shù)據(jù)庫方面使用SQL Server 2000與SQL Server 2008,表名TableB,字段名稱為Value1,數(shù)據(jù)庫名可以在App.config中修改,默認為test。
  方法一.使用基本的Insert語句
  這種方法是最基本的方法,大多數(shù)人一開始都會想到這種方法。但是Insert語句似乎并不適合大批量的操作,是不是這樣呢? 本方法中將100萬數(shù)據(jù)分為10個批次,每個批次10萬條,每10萬條1個事務(wù),分10次導(dǎo)入數(shù)據(jù)庫。
  -->基本語句:
  Insert Into TableB (Value1) values (‘”+i+”’); 說明:語句中的i是宿主程序中的一個累加變量,用于填充數(shù)據(jù)庫字段中的值。
  SQL Server 2000 耗時:901599
  SQL Server 2008耗時:497638
  方法二.在多線程中使用SqlBulkCopy類
  基于方法四,將100萬條數(shù)據(jù)分五個線程,每個線程負責(zé)20萬條數(shù)據(jù),每5萬條一個事物,五個線程同時啟動,看看這樣的效果吧。
  SQL 2000耗時:7682
  SQL 2008耗時:10870
  方法三.在多線程中使用BULK INSERT
  在方法二的基礎(chǔ)上,將100萬條數(shù)據(jù)分五個線程,每個線程負責(zé)20萬條數(shù)據(jù),每5萬條一個事物,五個線程同時啟動,看看這樣的效果吧。
  SQL Server 2000耗時:21099
  SQL Server 2008耗時:10997
  方法四.使用BULK INSERT語句
  這個類的效果,在本實驗中可以說是最令人滿意的了,它的使用最簡便、靈活,速度很快。 “BULK INSERT”語句似乎不是很常用, Aicken聽說Oracle中有一種可以將外部文件映射為Oracle臨時表,然后直接將臨時表中的數(shù)據(jù)導(dǎo)入Oracle其他表中的方法,這種方法的速度非常令人滿意。
  --> 基本語句:
  BULK INSERT TableB FROM '
  c:\\sql.txt' WITH (FIELDTERMINATOR = ',',ROWTER
  /.,mbMINATOR='|',BATCHSIZE = 100000)
  說明:“c:\\sql.txt”是一個預(yù)先生成的包含100條數(shù)據(jù)的文件,這些數(shù)據(jù)以“|”符號分隔,每10萬條數(shù)據(jù)一個事務(wù)。
  SQL Server 2000耗時:4009
  SQL Server 2008耗時:10722
  方法五.使用SqlBulkCopy類
  這種方法速度也很快,但是要依賴內(nèi)存,對于幾千萬條、多字段的復(fù)雜數(shù)據(jù),可能在內(nèi)存方面會有較大的消耗,不過可以使用64位解決方案處理這個問題。 幾千萬條、多字段的數(shù)據(jù)的情況一般在一些業(yè)務(wù)場景中會遇到,比如計算全球消費者某個業(yè)務(wù)周期消費額時,要先獲得主數(shù)據(jù)庫表中的會員消費記錄快照,并將快照儲存至臨時表中,然后供計算程序使用這些數(shù)據(jù)。并且有些時候消費者的消費數(shù)據(jù)并不在一臺數(shù)據(jù)庫服務(wù)器中,而是來自多個國家的多臺服務(wù)器,這樣我們就必須借助內(nèi)存或外存設(shè)備中轉(zhuǎn)這些數(shù)據(jù),然后清洗、合并、檢測,最后導(dǎo)入專用表供計算程序使用。
  基本語句:
  using (System.Data.SqlClient.SqlBulkCopy sqlBC
  = new System.Data.SqlClient.SqlBulkCopy(conn))
  { sqlBC.BatchSize = 100000; sqlBC.BulkCopyTimeout
  = 60; sqlBC.DestinationTableName = "dbo.TableB";
  sqlBC.ColumnMappings.Add("valueA", "Value1");
  sqlBC.WriteToServer(dt); }
  說明:
  BatchSize = 100000; 指示每10萬條一個事務(wù)并提交
  BulkCopyTimeout = 60; 指示60秒按超時處理
  DestinationTableName = "dbo.TableB"; 指示將數(shù)據(jù)導(dǎo)入TableB表
  ColumnMappings.Add("valueA", "Value1"); 指示將內(nèi)存中valueA字段與TableB中的Value1字段匹配
  WriteToServer(dt);寫入數(shù)據(jù)庫。其中dt是預(yù)先構(gòu)建好的DataTable,其中包含va

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 久久久久久a亚洲欧洲AV| 亚洲香蕉免费有线视频| 中文字幕日韩丝袜一区| 天堂在线免费观看中文版| 中日韩亚洲人成无码网站| 最近中文字幕在线mv视频7| 亚洲狼人综合网| 男生把女生桶爽| 哪个网站可以看毛片| 韩国免费乱理论片在线观看2018| 成年女人a毛片免费视频| 久草视频在线资源站| 欧美日韩亚洲一区二区精品| 伊人久久大香线蕉综合影| 精品视频香蕉尹人在线| 国产乱理伦片在线观看| 在线天堂av影院| 在线免费一区二区| sihu国产精品永久免费| 成人午夜兔费观看网站| 久久久久亚洲精品无码蜜桃| 日韩美女片视频| 亚洲中久无码永久在线观看同| 精品日韩欧美一区二区三区| 国产人妖视频一区二区破除| 国产精选之刘婷野战| 国产精品成人久久久久久久| 99久久免费精品视频| 女人腿张开让男人桶爽| 三级黄色毛片视频| 无码丰满熟妇浪潮一区二区AV| 亚洲免费在线观看| 污网站在线免费看| 人妻丝袜无码专区视频网站| 精品少妇ay一区二区三区| 国产AV无码专区亚洲AV| 韩国电影中文字幕在线观看| 国产成人精品一区二区三区| 777丰满影院| 国产精品igao视频网网址| 18女人水真多免费高清毛片|