日期:2014-05-16 浏览次数:20861 次
InnoDB有个特性“fast index creation”,创建和删除非聚簇索引时不需要重建表。
这句是转载的:This mechanism also means that you can generally speed the overall process of creating and loading an indexed table by creating the table with only the clustered index, and adding the secondary indexes after the data is loaded.
?
因此想到在mysqldump中,如果构造为先执行insert,再加索引,能够加速大的InnoDB表的重建过程。
?
1、mysqldump中的 “disable keys”
? 其实类似的思路在现在的mysqldump中已经有了,在insert之前有alter table xxx disable keys,插入数据之后alter table xxx enable keys. 但这个InnoDB 不支持。
?
2、实现
新增一个参数--keys-last,当使用--keys-last=1时,在create table之后把非聚簇索引删除,insert之后再创建。
?
3、执行效果
CREATE TABLE `tb` ( ? `a` int(11) NOT NULL DEFAULT '0', ? `c` int(11) DEFAULT NULL, ? PRIMARY KEY (`a`), ? UNIQUE KEY `a` (`a`,`c`), ? KEY `b` (`c`,`a`), ? KEY `ccc` (`a`,`c`), ? CONSTRAINT `tb_ibfk_1` FOREIGN KEY (`a`) REFERENCES `ta` (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Insert into tb values(1,1); |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|