2012-11-06 25 views
0

我知道我可能不會這樣做最有效的方法。我有以XML格式存儲的數據,並且我將XML數據解析爲單獨的INSERT INTO .. VALUES(..)語句,然後執行這些語句。是否有一種以批處理方式執行數百萬條INSERT INTO語句的好方法?mysql有效地執行了數百萬條INSERT語句

我不能使用常規的SQL Server實用工具導入XML數據,因爲我在AWS上運行這個工具。

任何建議表示讚賞!

+0

嘗試'在file'笨重的插入載荷數據(應該是可能爲aws)。這裏有一些參考:http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html – ajreal

回答

2

使用多INSERT方法,您提供多組VALUES的方法總比單獨使用它們好。您應該創建與您的max_allowed_packet設置一樣大的語句,並理想地將其調整爲儘可能高。 2GB的容量通常會盡可能高,並且爲了達到最高速度,您最好還是要至少懸掛10-50MB大小的塊。

LOAD DATA INFILE也是一個選項,但這通常比多方法最多快10-15%,並且要求數據以特定格式開始。 CSV或製表符分隔是最容易處理的,XML不是一種選擇。

爲了獲得最佳性能,請在插入大量數據之前禁用任何索引。即使在空數據庫模式的mysqldump快照中,也可以看到其中的一些技巧。

要禁用索引,您導入前執行該語句:

ALTER TABLE `table_name` DISABLE KEYS; 

然後導入後,重建它們:

ALTER TABLE `table_name` ENABLE KEYS; 
+0

好的,謝謝!我現在正在使用具有多組值的多重插入。你能否詳細說明「與max_allowed_pa​​cket一樣大」的評論? – Jin

+0

有一個服務器配置參數表示您的語句的大小,稱爲'max_allowed_pa​​cket'。如果這對您最適合,請不要害怕在50MB查詢中干擾。只要確保你的服務器不會因爲太大而通過相應地調整參數來拒絕它們。 – tadman

+0

順便說一下,感謝@platforms停用索引的片段。 – tadman