2013-09-26 34 views
0

使用LOAD XML將XML數據導入MySQL表是否是個好主意?在以後的MySQL版本(我使用5.5.34)中是否存在問題或顯着的性能改進?MySQL LOAD XML導入性能

我當前的測試運行使用大約50 MB的XML和簡單,空的InnoDB表,每個索引都有一個索引,這表明性能非常差 - 在帶有SSD的Core i7筆記本計算機上,每秒大約寫入8到8 KB。鑑於此性能,大約需要80天時間才能導入所有數據(20萬行),而目標大約需要4到8小時。

的SQL代碼如下所示:

LOAD XML LOCAL INFILE 'import.xml' 
    REPLACE INTO TABLE assets ROWS IDENTIFIED BY '<asset>'; 

MySQL服務器在CentOS 6.3在VMware Fusion中運行。所有文件都位於該VM內,因此在導入期間不會訪問主機FS。

+0

嗯,我猜想像CSV這樣的「更簡單」的格式將更容易解析,因此最有可能導入更快。至於你在桌上的索引,你可以放棄這些,只在導入後添加它們嗎?如果您在導入時不需要索引以避免重複或外鍵檢查,那麼這應該會加速一點。 – CBroe

+0

你在你的MySQL配置上做了什麼調整?默認配置實際上非常糟糕。另外,您是否將CSV的相對速度與XML進行了比較,以查看格式是否成問題? – tadman

+0

即使使用更新的MySQL版本並且沒有虛擬機,我的速度也不會超過3次/秒。常規的CSV導入速度非常快:無需任何調整且具有相同表格的情況下,最高可達2500次寫入/秒。我需要索引,因爲我們正在根據主鍵進行替換(你真的可以在沒有PK的情況下使用InnoDB嗎?)。 – lastzero

回答

0

解決方案是使用LOAD DATA INFILE而不是LOAD XML INFILE,這似乎在所有MySQL版本中都會遇到嚴重的性能問題。見評論。

這個改變對我來說不是一個大問題,因爲我使用XSLT來創建輸入文件。 XML會更容易,更靈活,但XSLT也允許創建純文本輸出(CSV/TSV)。