2010-02-19 85 views
3

我有一個數據庫,我需要插入批量數據(每次大約500k條記錄)。我正在用德比進行測試,並且看到大量記錄的插入時間約爲10-15分鐘(我正在使用Java進行批量插入)。Java大型數據庫插入

這段時間看起來是否緩慢(在平均筆記本電腦上工作)?有沒有辦法加快速度?

感謝,

傑夫

回答

5

這一次看起來完全合理,與我觀察到的時間一致。如果你想讓它跑得更快,你需要使用批量插入選項和禁用安全特性:

  • 使用預處理語句和5000到10000條記錄批次,除非它必須是一個交易
  • 使用DBMS中的批量加載選項
  • 禁用完整性臨時檢查插入
  • 禁用索引暫時或刪除索引並重新創建它們後插入
  • 禁用事務日誌和後重新啓用。

編輯:數據庫事務是由磁盤有限的I/O,並在筆記本電腦和大多數硬盤驅動器,最重要的數字是尋道時間的磁盤。

筆記本電腦往往有相當慢的磁盤,在5400轉。在這個速度下,尋找時間約爲5毫秒。如果我們假設每個記錄有一個搜索(大多數情況下估計過高),則需要40分鐘(500000 * 5 ms)插入所有行。現在,使用緩存機制和排序機制可以稍微降低這一點,但您可以看到問題來自何處。

我(當然)極大地簡化了這個問題,但是你可以看到我要去哪裏;期望數據庫以與順序批量I/O相同的速度執行是不合理的。你必須對你的記錄應用某種索引,這需要時間。

+0

這很有道理。謝謝。 – 2010-02-19 20:01:17

0

做的表有很多的指標?很多時間可能會花在更新這些索引上。

+1

如果放置爲「評論」 – Joset 2010-02-19 19:50:14

+0

,則它更合適其中只有2個索引。 – 2010-02-19 20:00:01