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);
|
bin/mysqldump -Srun/mysql.sock --keys-last=1 --disable-keys=0 -uroot test tb
|
LOCK TABLES `tb` WRITE;
ALTER TABLE `tb` DROP KEY `a` , DROP KEY `b` , DROP KEY `ccc` ;
INSERT INTO `tb` VALUES (1,1);
ALTER TABLE `tb` ADD UNIQUE KEY `a` (`a`,`c`), ADD KEY `b` (`c`,`a`), ADD KEY `ccc` (`a`,`c`);
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
由于明确是InnoDB的表,将disable-keys的两个语句取消。
Patch文件 (基于5.5.20) http://bugs.mysql.com/file.php?id=17978
分享到:
相关推荐
mysqldump 参数大全
mysqldump
详解 linux mysqldump 导出数据库、数据、表结构 导出完整的数据库备份: mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -q dbname > dbname.sql 说明:–add-locks:导出过程中锁定表,完成后回解锁...
mysql 导出的脚本,运行perl 生成word文档,文档通表格存储数据字典
Altable用来对通过mysqldump出来的表结构数据进行解析,分析出数据库、数据表、字段、主键、索引等信息。
mysqldump.exe 在win下导mysql数据用
mysqldump.exe 5.7工具,可以用来导出、导入mysql数据
生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句。 B. –opt 如果加上–opt参数则生成的dump文件中稍有不同: 建表语句包含drop table if exists tableName insert之前包含一个锁表...
NULL 博文链接:https://zhelong111.iteye.com/blog/2195985
主要介绍了mysqldump数据库备份参数详解,需要的朋友可以参考下
mysql mysqldump 只导出表结构 不导出数据 代码如下:mysqldump –opt -d ...导出结构不导出数据 代码如下: mysqldump –opt -d 数据库名 -u root -p > xxx.sql 2.导出数据不导出结构 代码如下: mysqldump
mysqldump常用于MySQL...生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句。 B. –opt 如果加上–opt参数则生成的dump文件中稍有不同: . 建表语句包含drop table if exists tableName .
这个时候mysqldump可能就不大好使了,使用下面的方法则可以解决这个问题。方法一、insert和select结合使用 1、新建一个表,比如new-table,包含所要导出的字段的名称,比如a,b,c 2、使用insert into new-table (a,b,...
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE ...接下来通过本文给大家介绍MySQL数据库使用mysqldump导出数据详解,需要的朋友一起学习吧
在低版本备份高版本的时候会报错。可以尝试直接用高版本的mysqldump备份。但是的一个exe文件。
windows mysqldump 5.7.35
LNH_MySQL 12-mysqldump-master-data参数答疑详解.mp4
mysqldump命令的用法 1、导出所有库 系统命令行 mysqldump -uusername -ppassword –all-databases > all.sql 2、导入所有库 mysql命令行 mysql>source all.sql; 3、导出某些库 系统命令行 mysqldump -uusername -...
windows版本mysqldump 5.7.24版本 无需安装mysql直接cmd使用 切换到文件存放目录 直接使用命令即可 mysqldump -uroot -p databasename >data.sql