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

  有很多網(wǎng)站建設(shè)初期數(shù)據(jù)信息有限,不要強(qiáng)大的數(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中修改,默認(rèn)為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ù)分五個線程,每個線程負(fù)責(zé)20萬條數(shù)據(jù),每5萬條一個事物,五個線程同時啟動,看看這樣的效果吧。
  SQL 2000耗時:7682
  SQL 2008耗時:10870
  方法三.在多線程中使用BULK INSERT
  在方法二的基礎(chǔ)上,將100萬條數(shù)據(jù)分五個線程,每個線程負(fù)責(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ù)場景中會遇到,比如計算全球消費(fèi)者某個業(yè)務(wù)周期消費(fèi)額時,要先獲得主數(shù)據(jù)庫表中的會員消費(fèi)記錄快照,并將快照儲存至臨時表中,然后供計算程序使用這些數(shù)據(jù)。并且有些時候消費(fèi)者的消費(fèi)數(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

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 国产精品免费看久久久无码| 日韩一中文字幕| 天天看免费高清影视| 久久精品国产99国产精品| 紧缚调教波多野结衣在线观看| 国产成人精品实拍在线| 一级一黄在线观看视频免费| 日韩免费无砖专区2020狼| 亚洲国产成人精品女人久久久 | 国产精品第9页| av网站免费线看| 最新国产AV无码专区亚洲| 台湾佬中文娱乐网在线更新| 777四色米奇欧美影院| 无忧传媒在线观看| 久久青草免费91线频观看不卡| 皇夫被迫含玉势女尊高h| 国产欧美精品区一区二区三区| 一本大道香一蕉久在线影院| 日本乱偷互换人妻中文字幕| 亚洲AV综合色区无码二区爱AV| 男女无遮挡高清性视频直播| 国产成人久久精品| 99爱在线精品视频免费观看9| 日本精品www色| 亚洲一区二区三区免费在线观看 | 国产精品久久久久久久久久免费 | 伊人久久大香线蕉综合影| 黑人巨茎大战欧美白妇| 国产精品亚洲成在人线| 一区二区免费视频| 日韩美视频网站| 亚洲制服在线观看| 真正全免费视频a毛片| 国产成人无码a区在线观看视频免费 | 污到流水的视频| 国产一卡二卡≡卡四卡免费乱码| 99ee6热久久免费精品6| 好男人官网资源在线观看| 久久国产精品视频| 欧美最猛性xxxx高清|