2010-10-26 41 views
0

我正在将数据库转储到文件中(通过gzip管道转储),并且需要大约2分钟才能创建300MB dump.sql.gz文件。MySQL转储和加载时间之间的不合理区别

当将文件加载回MySQL(转储以放置表开始)时,加载大约需要30分钟!

什么可以是这样一个巨大的时代差异的原因?是否有大幅度减少加载时间的一般技巧?

谢谢。

+1

它更新索引吗?你可以关闭索引,然后重新加载后重建? – 2010-10-26 09:52:11

回答

1

一个原因是写入数据库比读取数据要庞大得多。数据库必须确保写入是事务性的,它必须更新索引,扩展文件等等。

另一个重要的问题是MySQL将数据的SQL版本转储,如大文本文件中的大量insert语句。这很慢。来自其他数据库的备份通常是可以在原始数据库上写入的二进制文件,这比一次恢复一行更快。

+0

二进制文件图像总是恢复得更快 - 没有什么可以阻止你在MySQL上做这件事 – symcbean 2010-10-26 12:30:36

+0

是的,但是如果我想从InnoDB到MyISAM呢? – 2010-10-31 15:38:07

0

除了Andomar的回答 - 你会得到一个显着的改善,在转储中添加'--delayed-insert'和'--extended-insert'。

+0

你确定,花了43分钟,而不是半小时来加载你建议的方式创建的转储.. – 2010-10-31 13:21:18

+0

应该更快 - 我很惊讶 - 消除其他原因? – symcbean 2010-11-01 10:20:21