網(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高清|