2013-03-06 135 views
0

我剛剛從命令行使用mysqldump導出了一個150 MB的表。大約需要5秒鐘才能輸出。爲什麼MySQL導入比導出慢?

但是,當我嘗試導入相同的文件時,最多需要5分鐘。

爲什麼導入速度比導出慢,有沒有辦法加快速度?我需要導出/導入大於1 GB的表格。

它是否必須用鎖來做點什麼?由於select正在讀取數據,因此導出它會更快並且導入正在寫入數據,並且可能會更慢,因爲它需要寫入鎖定。

+1

它可能是索引在你的桌子上。 – kamituel 2013-03-06 23:01:36

+0

是與數據庫驅動器相同的目標物理驅動器?指數在寫作時確實也是一個大問題。 – Sebas 2013-03-06 23:04:43

+0

im從託管在託管公司之一的服務器上導出,並在本地主機上導入 – GGio 2013-03-06 23:08:13

回答

1

在幾乎任何介質上,寫入都比閱讀慢。在DBMS中,必須維護索引,必須檢查約束,必須分配空間,必須事先確定事務邊界,必須執行事務日誌以便回滾將起作用,...

1

閱讀比在DBMS中編寫要簡單得多。這是考慮事務日誌之前。例如,你必須寫一行數據;您還必須更新新行所在表格上的所有索引。這意味着每個書面記錄只有一個I/O。

+0

任何方式寫入都可以改進? – GGio 2013-03-06 23:11:30

+0

如果您要導入大量數據,請不要在數據加載完成之前構建索引。這樣,您可以一次構建索引,而不是永久更新。這通常可以節省很多工作。缺點是,如果您依靠索引來強制實施唯一性約束,那麼不存在的索引不能拒絕行。 – 2013-03-06 23:38:00