所以我試圖導入一些銷售數據到我的MySQL數據庫。這些數據最初是以原始CSV文件的形式存在的,我的PHP應用程序需要先處理這些數據,然後將處理後的銷售數據保存到數據庫中。導入批量數據到MySQL
最初我在做個別的INSERT
查詢,我意識到這是非常低效的(約6000個查詢幾乎要花費2分鐘)。然後我生成了一個大的查詢,並一次性編輯了所有的數據。這給我們提高了3400%的效率,並將查詢時間減少到剛好超過3秒。
但據我所知,LOAD DATA INFILE
應該比任何種類的INSERT
查詢更快。所以現在我正在考慮將處理後的數據寫入文本文件並使用LOAD DATA INFILE
將其導入數據庫。這是將大量數據插入數據庫的最佳方式嗎?或者我是否完全用錯誤的方式來解決這個問題?
我知道數以千計的大部分數字數據在事物的宏觀方案中並不是很多,但我試圖讓這個Intranet應用程序儘可能快速/快速響應。而且我還想確保在我們決定將該計劃授權給其他公司的情況下,此流程可以擴大規模。
UPDATE:
所以我沒有繼續前進,測試LOAD DATA INFILE
出的建議,認爲它會給我只邊際速度增加(因爲我現在正在寫相同數據到磁盤的兩倍),但我是當它將查詢時間從3300ms降低到〜240ms時感到驚訝。該頁面仍然需要大約1500毫秒才能執行總計,但仍然比以前明顯更好。
從這裏我猜我會檢查數據庫中是否有多餘的索引,並且由於除了兩個表格都是InnoDB,我會研究優化InnoDB緩衝池以優化整體性能。
我知道這個問題是在幾年前發佈的,但我不得不說,一個批量INSERT和LOAD DATA INFILE之間的區別是節省時間。我使用INSERT從30秒/秒增加到10秒,使用30列CSV文件加載~11000行。 – 2013-11-19 15:56:10