我想大量插入問怎麼會是最好的,我會在下面解釋的情況下進行:從CSV文件
我通過PHP MySQL數據庫輸入超過20萬行,我走線從一個csv文件,我的問題如下:
我應該解析csv文件,因爲我讀我插入行,或者我應該解析文件,在數組中放棄所有,然後使用foreach插入行中數據庫。
我問這是因爲在數據庫中包含的數據真的很慢。 該表是InnoDB。
我希望我很清楚。
N.B.我無法創建「LOAD DATA LOCAL INFILE」,因爲.csv文件中的字段先前已被映射。
謝謝
我想大量插入問怎麼會是最好的,我會在下面解釋的情況下進行:從CSV文件
我通過PHP MySQL數據庫輸入超過20萬行,我走線從一個csv文件,我的問題如下:
我應該解析csv文件,因爲我讀我插入行,或者我應該解析文件,在數組中放棄所有,然後使用foreach插入行中數據庫。
我問這是因爲在數據庫中包含的數據真的很慢。 該表是InnoDB。
我希望我很清楚。
N.B.我無法創建「LOAD DATA LOCAL INFILE」,因爲.csv文件中的字段先前已被映射。
謝謝
你的建議會因爲額外的內存訪問幾乎一樣快,一個與陣列也許稍慢的兩個選項。
但我認爲執行大量插入語句時的瓶頸是數據庫通信。所以這可能更快第三個選擇是降低插入語句連接所有插入數據的數量成一個語句,如:
INSERT INTO mytable VALUES(1,2,3),(4,5,6),(7,8,9), ... (10000, 10001, 10002);
據我知道一個mysql語句的最大長度,所以也許這是必須將語句拆分爲多個塊。
這樣的回答使性能優勢鞏固插入語句時,非常明確: https://stackoverflow.com/a/1793209/1696795
我想到了這個解決方案,其實現在我會試着實現。 謝謝大家 – enzo
也許你可以使用PHP來重新映射領域到的東西,將與LOAD DATA LOCAL INFILE工作。 – dgig
「在數據庫中包含數據的速度真的很慢」:假設你的意思是它比你想要的要慢,或者你真的想慢插入。 – Gilbert
你是什麼意思的「以前映射」?如果只是數據已經存在,則可以使用LOAD DATA並跳過列標題。如果列需要處理/轉換,則可以讀入臨時變量。 – bitfiddler