本文介紹了幾種不同的批量導(dǎo)入數(shù)據(jù)的方法、各種方法相應(yīng)的實(shí)例及其所需的時(shí)間長(zhǎng)短……
如果需要向SQL Server批量導(dǎo)入數(shù)據(jù),根據(jù)導(dǎo)入的選項(xiàng)和表中的索引設(shè)置,數(shù)據(jù)導(dǎo)入的時(shí)間可能會(huì)在不同情況下相差甚遠(yuǎn)。如何能夠把批量導(dǎo)入的過(guò)程盡量少花時(shí)間呢?在這里我們將會(huì)介紹幾種不同的批量導(dǎo)入數(shù)據(jù)的方法、各種方法相應(yīng)的實(shí)例及其所需的時(shí)間長(zhǎng)短。
在我們的測(cè)試中我們采取了六種不同的數(shù)據(jù)導(dǎo)入方法:
1. 表含有一個(gè)聚集索引(clustered index)和兩個(gè)非聚集索引(non-clustered index)
2. 表只含有一個(gè)聚集索引
3. 表不含有任何索引
4. 表不含有任何索引并且有TABLOCK指示
5. 表只含有一個(gè)聚集索引并且有TABLOCK指示
6. 表含有一個(gè)聚集索引一個(gè)聚集索引并且有TABLOCK指示
另外,測(cè)試所用數(shù)據(jù)庫(kù)在測(cè)試前設(shè)置為批日志恢復(fù)模式。
這些測(cè)試中,每次迭代后數(shù)據(jù)庫(kù)和日志都會(huì)清理日志文件,而且實(shí)施每一個(gè)步驟之前都將表刪除,然后重新創(chuàng)建新表。
測(cè)試一
第一次運(yùn)行是使用一個(gè)含有121317行的數(shù)據(jù)集和一個(gè)空表。每次運(yùn)行之前都會(huì)重新創(chuàng)建符合測(cè)試的表。
如下表結(jié)果所示,我們可以看出根據(jù)你用來(lái)導(dǎo)入數(shù)據(jù)的不同程序,運(yùn)行時(shí)間有所不同。
| ID | 測(cè)試 | 運(yùn)行(1) | 運(yùn)行(2) |
| 1 | 表含有一個(gè)聚集索引(clustered index)和兩個(gè)非聚集索引(non-clustered index) | 5.1 | 5.3 |
| 2 | 表只含有一個(gè)聚集索引 | 3.2 | 3.0 |
| 3 | 表不含有任何索引 | 1.4 | 1.4 |
| 4 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 1.2 | 1.3 |
| 5 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 2.8 | 2.5 |
| 6 | 表含有一個(gè)聚集索引一個(gè)聚集索引并且有TABLOCK指示 | 4.1 | 3.9 |
測(cè)試2
第二次運(yùn)行是使用一個(gè)含有242634行的數(shù)據(jù)集和一個(gè)空表。每次運(yùn)行之前都會(huì)重新創(chuàng)建符合測(cè)試的表。
我們可以看到這些運(yùn)行的時(shí)間有一些差別。
| ID | Test | 運(yùn)行(1) | 運(yùn)行(2) |
| 1 | 表含有一個(gè)聚集索引(clustered index)和兩個(gè)非聚集索引(non-clustered index) | 14.0 | 13.8 |
| 2 | 表只含有一個(gè)聚集索引 | 6.9 | 7.3 |
| 3 | 表不含有任何索引 | 2.7 | 2.7 |
| 4 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 2.5 | 2.5 |
| 5 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 5.6 | 5.5 |
| 6 | 表含有一個(gè)聚集索引一個(gè)聚集索引并且有TABLOCK指示 | 8.4 | 8.7 |
測(cè)試三
在這個(gè)測(cè)試中,我們運(yùn)行了兩個(gè)導(dǎo)入過(guò)程。第一次導(dǎo)入使用了一個(gè)含有121317行和一個(gè)空表,然后在同一個(gè)表中導(dǎo)入另外121317條記錄。每次運(yùn)行之前都會(huì)重新創(chuàng)建符合測(cè)試的表。
| ID | 測(cè)試 | 運(yùn)行(1) | 運(yùn)行(2) | 總時(shí)間 |
| 1 | 表含有一個(gè)聚集索引(clustered index)和兩個(gè)非聚集索引(non-clustered index) | 8.4 | 7.7 | 16.1 |
| 2 | 表只含有一個(gè)聚集索引 | 3.5 | 3.2 | 6.7 |
| 3 | 表不含有任何索引 | 1.5 | 1.4 | 2.9 |
| 4 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 1.3 | 1.3 | 2.6 |
| 5 | 表只含有一個(gè)聚集索引并且有TABLOCK指示 | 3.1 | 4.0 | 7.1 |
| 6 | 表含有一個(gè)聚集索引一個(gè)聚集索引并且有TABLOCK指示 | 4.0 | 8.5 | 12.5 |
總結(jié)
我們可以從以上測(cè)試的結(jié)果看出,各種不同的條件會(huì)影響數(shù)據(jù)導(dǎo)入所用的時(shí)間。因此,如果想要更快地導(dǎo)入數(shù)據(jù),可以導(dǎo)入不含任何索引的表,在導(dǎo)入完成之后再建立索引。不過(guò)我們的測(cè)試中沒有檢測(cè)在導(dǎo)入完成后建立索引所需要的時(shí)間。
另外,還要注意確保你的數(shù)據(jù)和日志文件有足夠的空間來(lái)完成這個(gè)導(dǎo)入過(guò)程而不會(huì)導(dǎo)致文件自動(dòng)增長(zhǎng)。文件自動(dòng)增長(zhǎng)會(huì)極大地影響總導(dǎo)入的速度。
新聞熱點(diǎn)
疑難解答
圖片精選