如果需要向sql server批量匯入資料,根據匯入的選項和表中的索引設定,資料匯入的時間可能會在不同情況下相差甚遠。如何能夠把批量匯入的過程盡量少花時間呢?在這裡我們將會介紹幾種不同的批量匯入資料的方法、各種方法相應的例項及其所需的時間長短。
在我們的測試中我們採取了六種不同的資料匯入方法:
1、表含有乙個聚集索引(clustered index)和兩個非聚集索引(non-clustered index)
2、表只含有乙個聚集索引
3、表不含有任何索引
4、表不含有任何索引並且有tablock指示
5、表只含有乙個聚集索引並且有tablock指示
6、表含有乙個聚集索引乙個聚集索引並且有tablock指示
另外,測試所用資料庫在測試前設定為批日誌恢復模式。
這些測試中,每次迭代後資料庫和日誌都會清理日誌檔案,而且實施每乙個步驟之前都將表刪除,然後重新建立新錶。
測試一
第一次執行是使用乙個含有121317行的資料集和乙個空表。每次執行之前都會重新建立符合測試的表。
如下圖結果所示,我們可以看出根據你用來匯入資料的不同程式,執行時間有所不同。
id測試
執行(1)
執行(2)
1表含有乙個聚集索引(clustered index)和兩個非聚集索引(non-clustered index)
5.15.3
2表只含有乙個聚集索引
3.23.0
3表不含有任何索引
1.41.4
4表只含有乙個聚集索引並且有tablock指示
1.21.3
5表只含有乙個聚集索引並且有tablock指示
2.82.5
6表含有乙個聚集索引乙個聚集索引並且有tablock指示
4.13.9
測試2
第二次執行是使用乙個含有242634行的資料集和乙個空表。每次執行之前都會重新建立符合測試的表。
我們可以看到這些執行的時間有一些差別。
idtest
執行(1)
執行(2)
1表含有乙個聚集索引(clustered index)和兩個非聚集索引(non-clustered index)
14.0
13.8
2表只含有乙個聚集索引
6.97.3
3表不含有任何索引
2.72.7
4表只含有乙個聚集索引並且有tablock指示
2.52.5
5表只含有乙個聚集索引並且有tablock指示
5.65.5
6表含有乙個聚集索引乙個聚集索引並且有tablock指示
8.48.7
測試三
在這個測試中,我們執行了兩個匯入過程。第一次匯入使用了乙個含有121317行和乙個空表,然後在同乙個表中匯入另外121317條記錄。每次執行之前都會重新建立符合測試的表。
id測試
執行(1)
執行(2)
總時間1
表含有乙個聚集索引(clustered index)和兩個非聚集索引(non-clustered index)
8.47.7
16.1
2表只含有乙個聚集索引
3.53.2
6.73
表不含有任何索引
1.51.4
2.94
表只含有乙個聚集索引並且有tablock指示
1.3
1.32.6
5表只含有乙個聚集索引並且有tablock指示
3.14.0
7.16
表含有乙個聚集索引乙個聚集索引並且有tablock指示
4.08.5
12.5
總結
我們可以從以上測試的結果看出,各種不同的條件會影響資料匯入所用的時間。因此,如果想要更快地匯入資料,可以匯入不含任何索引的表,在匯入完成之後再建立索引。不過我們的測試中沒有檢測在匯入完成後建立索引所需要的時間。
另外,還要注意確保你的資料和日誌檔案有足夠的空間來完成這個匯入過程而不會導致檔案自動增長。檔案自動增長會極大地影響總匯入的速度。
Sqlserver匯入資料
錯誤 0xc002f210 準備 sql 任務 1 執行查詢 truncate table dbo city 失敗,錯誤如下 無法截斷表 dbo.city 因為該錶正由foreign key 約束引用。失敗的原因可能有 查詢本身有問題 未正確設定 resultset 屬性 未正確設定引數或未正確建立...
將Excel 表快速匯入sqlserver
從exce表中直接匯入到資料庫中 private void barbuttonitem從excel匯入 itemclick object sender,devexpress.xtrabars.itemclickeventargs e while read.nextresult read.close ...
Execl資料匯入SQL Server
將execl 資料匯入進資料庫 可以指定列 也可以 注意 該語句只能在本地資料庫執行 如果連線的是遠端伺服器 應到該伺服器上執行語句 設定伺服器全域性配置 啟用ad hoc distributed queries 該元件存在 安全隱患 所以預設是關閉 exec sp configure show a...