2012-04-19 103 views
34

我有一個SQL文件,其中包含兩個表格共約600,000行。昨天,我嘗試將文件導入到Fedora 16的MySQL數據庫中,並且導入該文件花費了2個多小時。在我的Windows PC上花了7分鐘。我的Linux和Windows機器具有完全相同的硬件。我的幾個朋友也嘗試過,他們也有類似的經歷。爲什麼SQL的導入很慢?

我們使用的命令是:mysql -u root database_name < sql_file.sql

爲什麼速度有這樣的差異?

+0

相同的表格類型(INNODB/MYISAM/...)? – 2012-04-19 11:33:08

+0

是的,表格類型是相同的:Innodb – 2012-04-19 11:33:50

+0

你檢查了mysqlimport嗎?查看http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-files – rorycl 2012-04-19 11:35:52

回答

65

我敢打賭,Fedora 16尊重事務/同步語義,而Windows不是。如果你做數學,兩個小時內的600,000次更新是每分鐘5,000次。這與磁盤旋轉速度的數量級相同。

您可以嘗試將SET autocommit=0;添加到導入文件的開頭,並將COMMIT;添加到最後。有關更多信息,請參閱this page

+2

它造成了巨大的差異!只是再試一次,導入的總時間低於3分鐘。坦克很多:) – 2012-04-19 11:58:48

+0

區別是天文數字。在開始您的建議之前,我已經等了27分鐘的轉儲文件20分鐘。之後不到一分鐘。很好的答案! – 2013-08-06 11:14:25

+0

這工作得很好。否則,使用批量插入對輸入文件進行整形也將起作用。謝謝。 – 2013-09-02 09:25:09

3

你爲什麼不導出.sql文件爲BULK INSERT選項並將其導入,請嘗試以下方法,而使用mysqldump

--extended-insert進行備份:使用多行INSERT語句

--quick:不做行數據的緩衝,好,如果表很大

注:確保生成.sql文件之前,您應該增加max_allowed_packet = 32M以上的my.cnf文件的價值。

+0

感謝您的回答,我會檢查出來。 – 2012-04-19 12:00:42

+1

@LarsSteen Mahesh Patil的提示有什麼不同嗎? – Alex 2015-04-15 11:07:59

+0

不,沒有太大的區別。 – 2016-04-26 13:53:46