2011-03-08 23 views
4

我正在開發一個應用程序,並有超過100,000條記錄,這些記錄已經從文件中讀入,需要插入到MySQL數據庫中。通過PHP向MySQL數據庫添加100,000多條記錄的最佳方法是什麼?

將這些插入數據庫的最佳方法是什麼?

我目前正在使用的方法是生成一個SQL查詢,以便將一次調用中的所有記錄插入數據庫。

INSERT INTO table (field1, field2) 
VALUES 
(123, 456), 
(125, 984), 
... 

是否可以一次插入記錄數限制?就性能而言,這是最好的方法嗎?

我曾考慮將記錄拆分爲多個查詢的替代方案,但我不確定這是否會帶來任何好處?

任何意見將不勝感激,謝謝!

+1

你正在用更好的方法mysqldump做同樣的插入 – 2011-03-08 19:06:31

回答

3

你這樣做的方式確實非常有效。最大查詢長度由max_allowed_pa​​cket的設置來決定,所以你可能需要將查詢拆分成多個查詢,看http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

+0

謝謝,正是我正在尋找。 – jbx 2011-03-08 19:20:37

+0

無論配置的限制如何,您都可能想要限制吞吐量,以使服務器有一段時間呼吸。如果這是一個運行其他進程的活動服務器,那麼以明智的方式執行插入操作並不是一個壞習慣,需要暫停一會兒(幾毫秒)並繼續。這樣可以防止其他進程的性能下降,並防止可能的表鎖(如果您在同一臺數據庫服務器上執行大量其他操作,這也只是一個問題)。如果您想提高性能並修復鎖定問題,則應該查看tx_isolation圖層參數。 – 2017-02-27 10:16:51

1

我會建議在與這取決於你的引擎LOW_PRIORITYDELAYED一次添加一行。原因是表中的其他用戶仍然可以在一段時間內讀寫一次,而不是讓整個表在一段較長的時間內被鎖定。

+0

感謝您的提示,這將在未來一定有用。 – jbx 2011-03-08 19:21:38

1

權限和/或格式不頂住,使用

load data infile to import the file directly

+0

我正在閱讀的文件的實際內容需要大量的處理才能獲取我之後的信息,否則這將非常有效!謝謝 – jbx 2011-03-08 19:24:42

1

LOAD DATA INFILE可能是最好的一段路要走。特別是如果您正在閱讀的數據文件已經是可以使用的格式。

1

您可能會考慮MySQL的LOAD DATA INFILE命令以插入CSV文件中的數據。

相關問題