我現在有一個2G左右的txt檔案 里面包含200w條記錄
現在需要寫一個程式將txt檔案內的資料全部匯入sqlserver中
我用的是按行讀取 然后逐行insert進入資料庫中
因為文本是根據字符個數來分割欄位 所以用external 的dw沒有能成功獲取資料
我現在最大的問題是可以匯入 但是匯入速度比較慢 一般是100記錄/s
而且因為單執行緒 程式容易處于假死狀態
求救如何可以讓這個程式提高效率 并且不會假死 謝謝了
uj5u.com熱心網友回復:
直接用DW匯入保存啊!數量上分批匯入!加個滾動條顯示進度!
uj5u.com熱心網友回復:
樓上的 我已經寫了 因為文本沒有分隔符 所以我沒有成功使用external的dwuj5u.com熱心網友回復:
分批執行,一次匯入10w,首先將10w條insert陳述句形成,在執行一個提交uj5u.com熱心網友回復:
按行讀取肯定慢 每次32K ,2G左右的txt檔案 肯定會用較長時間簡單來做就是加等待提示或進度條
uj5u.com熱心網友回復:
用資料匯入/匯出功能試試看.uj5u.com熱心網友回復:
那是否有辦法有更高效的手段那uj5u.com熱心網友回復:
你試一下,添加兩個資料視窗dw_1和dw_2dw_1中只有一個欄位str 【char(4000)】用于匯入txt檔案(因為沒有分隔符,整行都匯入str中)
再在dw_1中添加幾個計算列,如:com1, com2,com3,你的資料中有幾個欄位就添加幾個,每個列的運算式分別為 mid(str, m, n) 這樣就可以取得每個欄位的值了。
dw_2中的列與應資料庫的列一一對應,并且可以update,假設列分別為a,b,c
執行:
dw_2.object.a.primary = dw_1.object.com1.primary
dw_2.object.b.primary = dw_1.object.com2.primary
dw_2.object.c.primary = dw_1.object.com3.primary
然后再dw_2.update()
你試試看吧,我沒試過,不知道可不可行,速度如何?
uj5u.com熱心網友回復:
1. 取消回顯,不要每輸出一條記錄就輸出一條資訊。因為顯示輸出資訊會降低效率。2。每一萬或十萬行commit一次,并輸出一個狀態資訊,以表示程式仍然在運行。
3。檢查你的程式在處理大檔案時是否快。如果程式一開始很快,到后來越來越慢,那么可能是你處理2G的大檔案有問題。
uj5u.com熱心網友回復:
弄個執行緒在后面慢慢的插轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96420.html
標籤:數據庫相關
上一篇:用randomize函式出了問題
下一篇:圖片以blob格式存取的問題
