我曾经处理过Myisam表,但是对于外来连接,我改为Innodb表(已转换,并添加了外键)。我经常从服务器下载数据库,并用它填充localhost。当它是myisam表时,它曾经很快就像地狱一样。但现在它需要超过30分钟...我知道它必须在插入记录之前进行检查,但我禁用了外键检查。它的一些方面:
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;
删除/创建/截断所有表。然后INSERT,INSERT ......如何让它更快?
答案 0 :(得分:2)
假设您使用mysqldump
,请使用--extended-insert
。这会将多行的插入组合成一个语句。
同时尝试--disable-keys
选项。这不仅会禁用外键检查,还会禁用索引更新,直到插入所有行。一次更新索引通常要快得多。
如果您没有使用mysqldump
,则可以在转储前执行ALTER TABLE table_name DISABLE KEYS;
,并在每个表的转储后执行ALTER TABLE table_name ENABLE KEYS;
。
但是,您可能会发现特定于数据库引擎的备份工具会更快。试试XtraBackup。