2010-11-10 35 views
0

我需要從具有20億條記錄的主表插入一個表。插入需要滿足一些條件,並且還需要在需要計算的某些列中插入。哪個在DB2中具有更多性能

我有2個選項,但我不知道要按照哪些方法來提高性能。

1選項

通過與conditons從主表濾波創建一個遊標。並得到一個接一個的記錄,然後插入到子表中

2選項 先插入使用條件,然後使用update語句進行計算。

請協助。

回答

1

有一個遊標來獲取數據,執行計算,然後插入數據庫將是耗時的。我的猜測是,因爲它涉及數據連接和每個檢索和插入的I/O(對於兩個數據庫)

數據庫通常對批量操作更好,所以如果使用選項2,它肯定會給你更好的性能。選項2更適合故障排除(因爲該流程完全分離 - 步驟1:下載,步驟2:計算)比選項1更好,在進程中間出現錯誤的情況下,您將被迫重新執行所有步驟。

0

打開遊標並逐個插入記錄可能會導致嚴重的性能問題,數量在十億左右。特別是如果您的數據庫層和應用層之間的網絡較弱。最快的方法是使用Db2導出實用程序下載數據,讓程序處理文件中的數據,然後將文件加載回子表。除了基於文件的選項外,還可以考慮以下方法

1)編寫一個SQL存儲過程(不需要將數據從數據庫中發出以進行更改) 2)如果使用Java/JDBC使用批處理更新功能在如果你使用像Informatica的工具,同時 3)更新多條記錄,在Informatica的

打開批量加載功能也看到imporving插入性能的IBM DW文章。文章有點舊,但概念仍然有效。 http://www.ibm.com/developerworks/data/library/tips/dm-0403wilkins/