如果需要向SQL Server批量導(dǎo)入數(shù)據(jù),根據(jù)導(dǎo)入的選項(xiàng)和表中的索引設(shè)置,數(shù)據(jù)導(dǎo)入的時(shí)間可能會在不同情況下相差甚遠(yuǎn)。如何能夠把批量導(dǎo)入的過程盡量少花時(shí)間呢?在這里我們將會介紹幾種不同的批量導(dǎo)入數(shù)據(jù)的方法、各種方法相應(yīng)的實(shí)例及其所需的時(shí)間長短。

華鎣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,華鎣網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為華鎣上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個(gè)售后服務(wù)好的華鎣做網(wǎng)站的公司定做!
在我們的測試中我們采取了六種不同的數(shù)據(jù)導(dǎo)入方法:
1、表含有一個(gè)聚集索引(clustered index)和兩個(gè)非聚集索引(non-clustered index)
2、表只含有一個(gè)聚集索引
3、表不含有任何索引
4、表不含有任何索引并且有TABLOCK指示
5、表只含有一個(gè)聚集索引并且有TABLOCK指示
6、表含有一個(gè)聚集索引一個(gè)聚集索引并且有TABLOCK指示
另外,測試所用數(shù)據(jù)庫在測試前設(shè)置為批日志恢復(fù)模式。
這些測試中,每次迭代后數(shù)據(jù)庫和日志都會清理日志文件,而且實(shí)施每一個(gè)步驟之前都將表刪除,然后重新創(chuàng)建新表。
測試一
第一次運(yùn)行是使用一個(gè)含有121317行的數(shù)據(jù)集和一個(gè)空表。每次運(yùn)行之前都會重新創(chuàng)建符合測試的表。
如下圖結(jié)果所示,我們可以看出根據(jù)你用來導(dǎo)入數(shù)據(jù)的不同程序,運(yùn)行時(shí)間有所不同。
測試2
第二次運(yùn)行是使用一個(gè)含有242634行的數(shù)據(jù)集和一個(gè)空表。每次運(yùn)行之前都會重新創(chuàng)建符合測試的表。
我們可以看到這些運(yùn)行的時(shí)間有一些差別。
測試三
在這個(gè)測試中,我們運(yùn)行了兩個(gè)導(dǎo)入過程。第一次導(dǎo)入使用了一個(gè)含有121317行和一個(gè)空表,然后在同一個(gè)表中導(dǎo)入另外121317條記錄。每次運(yùn)行之前都會重新創(chuàng)建符合測試的表。
總結(jié)
我們可以從以上測試的結(jié)果看出,各種不同的條件會影響數(shù)據(jù)導(dǎo)入所用的時(shí)間。因此,如果想要更快地導(dǎo)入數(shù)據(jù),可以導(dǎo)入不含任何索引的表,在導(dǎo)入完成之后再建立索引。不過我們的測試中沒有檢測在導(dǎo)入完成后建立索引所需要的時(shí)間。
另外,還要注意確保你的數(shù)據(jù)和日志文件有足夠的空間來完成這個(gè)導(dǎo)入過程而不會導(dǎo)致文件自動增長。文件自動增長會極大地影響總導(dǎo)入的速度。
您好:
從理論上來說,修改表結(jié)構(gòu)和數(shù)據(jù)量無關(guān)。
所以修改方法是一樣的。。。
從實(shí)際情況看,您可以根據(jù)需要的結(jié)構(gòu)建立新表使用。
原有數(shù)據(jù)根據(jù)情況遷移回來一部分,滿足版本迭代的要求。
逐步棄用原表。。。
我寫給你
CREATE PROCEDURE xinwen
(@ID int)
AS
CREATE TABLE #t_Level(ID int,Level int)
DECLARE @Level int
BEGIN
SET @Level=1
INSERT t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT0
BEGIN
SET @Level=@Level+1
INSERT t_Level SELECT a.ID,@Level
FROM 新聞表 a,t_Level b
WHERE a.prents=b.ID
AND b.Level=@Level-1
END
delete from 新聞表 where id in (select id from #t_Level)
END
GO
新聞表就是你那個(gè)表
不知道是哪行的問題
可能是這個(gè)結(jié)果集是只能迭代一次的 不能用rs.beforeFirst()這個(gè)方法
也就是程序說的只進(jìn)
你可以創(chuàng)建一個(gè)滾動的結(jié)果集 把之前某行換成
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE)
我也是猜的 可以試一下~
分享標(biāo)題:迭代sqlserver,迭代法
網(wǎng)站鏈接:http://chinadenli.net/article24/dsihije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、網(wǎng)站排名、移動網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)