步驟1:通過從.txt「大容量插入」(分隔)文件導入表1中加載的數據(沒有索引等)什麼是從巨大表中刪除「非唯一」值的「最佳實踐」?
bulk insert Table_1
from '\\path\to_some_file.txt'
with (tablock, FORMATFILE ='format_file_path.xml')
通過格式文件I映射輸出列數據類型以避免進一步的轉換(從CHAR到INT例如)
步驟2:將結果輸出(也許不是所有來自表1)列到另一表2中,但只有不同的值從表1中。
NB! Table_1約爲2000萬條記錄(每個負載)。
我們現在有(例如簡化):
select distinct convert(int, col1), convert(int, col2), col3, ...
into Table_2
from Table_1
大約需要3.5分鐘來處理。 您能否建議一些可能有助於減少處理時間並將唯一記錄放入Table_2的最佳做法?
在此先感謝!
UPD 1:誤解對不起 - 我的意思是選擇不同的查詢需要3.5分鐘。 「批量插入」相當優化 - 它通過8個線程(8個單獨的.txt文件)「批量插入」加載到1個帶有(TABLOCK)的表中,並在大約1分鐘內導入20毫升記錄。
UPD 2:我測試了不同的方法(在SSIS沒有測試 - 在我們的應用這種方法是行不通的): 最好的結果是,當數據「批量插入」到TABLE_2格式已經接近(列類型匹配,數據類型 - 也),所以我們消除數據類型轉換。並且只是「明顯」不同:
select distinct * into Table_2 from Table_1
進行70秒的處理。所以我可以考慮這是我現在可以得到的最好結果。 我也嘗試了一些技巧(額外的命令,CTE贏分組等) - 他們更糟糕,然後「明顯」不同。
謝謝大家的參與!
3.5分鐘聽起來很合理。你爲什麼需要它更快?這是你經常做的事嗎?你爲什麼經常這樣做?你有沒有考慮其他方法來解決這個問題? – 2010-09-09 16:05:06
嗯..我只是試圖澄清自己,如果沒關係。因爲我們應用程序中的很多部分不是非常優化。是的,我們每週都會處理這麼多的數據。因爲我們有很多來自客戶的數據(並且有很多數據)。如果我們每月都這樣做一次 - 在我的示例中處理所有數據(有很多處理步驟)需要一天的時間 - 這只是流程的一小部分。 – zmische 2010-09-09 17:24:17
也許你的CONVERT語句正在放慢速度。 – Sam 2010-09-09 17:49:38