2013-03-06 133 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