恢复InnoDB表格:非常非常慢?

问题描述:

我用来处理Myisam表,但对于外部连接,我更改为Innodb表(转换并添加外键)。我经常从服务器下载数据库,并用它填充本地主机。当它是myisam桌子时,它过去就像地狱一样快。但现在它需要超过30分钟......我知道它必须在插入记录之前进行检查,但我禁用了外键检查。它的一些行:恢复InnoDB表格:非常非常慢?

SET FOREIGN_KEY_CHECKS=0; 
DROP TABLE IF EXISTS t1; 
CREATE TABLE `t1` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME` varchar(255) NOT NULL default '', PRIMARY KEY (`ID`), UNIQUE KEY `Index_2` (`NAME`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 
TRUNCATE TABLE t1; 

drop/create/truncate all tables。然后INSERT,INSERT ...如何使其更快?

假设您使用mysqldump,请使用--extended-insert。这将把多行插入组合成一个语句。

另请尝试--disable-keys选项。这不仅会禁用外键检查,还会禁止更新索引,直到插入所有行。一次更新索引通常要快得多。

如果您不使用mysqldump,则可以在转储之前执行ALTER TABLE table_name DISABLE KEYS;,并在每个表的转储之后执行ALTER TABLE table_name ENABLE KEYS;

但是,您可能会发现数据库引擎特定的备份工具会更快。尝试XtraBackup

+0

我自己的代码,没有任何外部的东西:)好吧我试试 – user893856

+0

如果你所做的只是倾销本地数据库的副本,我强烈建议不要构建自己的工具。有很多现有的工具。 –

+0

这是否有帮助取决于索引的复杂程度。在某些情况下,它不会有所作为。我强烈推荐XtraBackup。备份过程和恢复过程主要是复制文件(用一些魔术来确保数据是一致的),而不是运行大量的SQL。 –