網(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女人水真多免费高清毛片|