我有一個SQL文件,其中包含兩個表格共約600,000行。昨天,我嘗試將文件導入到Fedora 16的MySQL數據庫中,並且導入該文件花費了2個多小時。在我的Windows PC上花了7分鐘。我的Linux和Windows機器具有完全相同的硬件。我的幾個朋友也嘗試過,他們也有類似的經歷。爲什麼SQL的導入很慢?
我們使用的命令是:mysql -u root database_name < sql_file.sql
。
爲什麼速度有這樣的差異?
我有一個SQL文件,其中包含兩個表格共約600,000行。昨天,我嘗試將文件導入到Fedora 16的MySQL數據庫中,並且導入該文件花費了2個多小時。在我的Windows PC上花了7分鐘。我的Linux和Windows機器具有完全相同的硬件。我的幾個朋友也嘗試過,他們也有類似的經歷。爲什麼SQL的導入很慢?
我們使用的命令是:mysql -u root database_name < sql_file.sql
。
爲什麼速度有這樣的差異?
我敢打賭,Fedora 16尊重事務/同步語義,而Windows不是。如果你做數學,兩個小時內的600,000次更新是每分鐘5,000次。這與磁盤旋轉速度的數量級相同。
您可以嘗試將SET autocommit=0;
添加到導入文件的開頭,並將COMMIT;
添加到最後。有關更多信息,請參閱this page。
它造成了巨大的差異!只是再試一次,導入的總時間低於3分鐘。坦克很多:) – 2012-04-19 11:58:48
區別是天文數字。在開始您的建議之前,我已經等了27分鐘的轉儲文件20分鐘。之後不到一分鐘。很好的答案! – 2013-08-06 11:14:25
這工作得很好。否則,使用批量插入對輸入文件進行整形也將起作用。謝謝。 – 2013-09-02 09:25:09
你爲什麼不導出.sql文件爲BULK INSERT
選項並將其導入,請嘗試以下方法,而使用mysqldump
--extended-insert
進行備份:使用多行INSERT語句
--quick
:不做行數據的緩衝,好,如果表很大
注:確保生成.sql文件之前,您應該增加max_allowed_packet
= 32M以上的my.cnf文件的價值。
感謝您的回答,我會檢查出來。 – 2012-04-19 12:00:42
@LarsSteen Mahesh Patil的提示有什麼不同嗎? – Alex 2015-04-15 11:07:59
不,沒有太大的區別。 – 2016-04-26 13:53:46
相同的表格類型(INNODB/MYISAM/...)? – 2012-04-19 11:33:08
是的,表格類型是相同的:Innodb – 2012-04-19 11:33:50
你檢查了mysqlimport嗎?查看http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-files – rorycl 2012-04-19 11:35:52