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`的基本功能:它是一个用于备份MySQL数据库的工具,能够将一个或多个数据库转换为SQL脚本,以便进行备份、迁移或者恢复操作。接下来,我们将详细解析`...
执行这个命令后,`structure_only.sql`文件将包含创建表、视图、索引等结构的SQL语句,但不包含任何实际的数据。 在某些情况下,可能需要导出特定表的数据或结构。为此,可以添加表名到命令中,如: ```bash ...
mysqldump是MySQL数据库管理系统的一部分,主要功能是生成SQL语句,这些语句可以用来创建数据库结构、插入数据,甚至重建整个数据库。在Windows环境中,mysqldump.exe是该工具的可执行文件,位于MySQL的bin目录下,...
1. 数据库备份:`mysqldump`是MySQL备份的主要手段,通过命令行参数,可以完整地或部分地将数据库结构和数据导出为SQL脚本文件,如`mysqldump -u username -p database_name > backup.sql`。这不仅便于数据的保存,...
mysqldump
你可能不知道`mysqldump`工具其实允许通过`--where`参数来筛选导出的数据。例如,如果你想导出`ID`大于2312387的记录: ```bash mysqldump -u root -p bbscs6 BBSCS_USERINFO --where "ID>2312387" > BBSCS_USERINFO...
详解 linux mysqldump 导出数据库、数据、表结构 导出完整的数据库备份: mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -q dbname > dbname.sql 说明:–add-locks:导出过程中锁定表,完成后回解锁...
2. **数据表解析**:在mysqldump的输出中,数据表的创建语句包含了表的完整结构。Altable可以解析出这些语句,提供每个表的名称、字段数量、字段类型、字符集和排序规则等信息。 3. **字段信息**:字段是数据库中的...
mysqldump全量备份常用参数和脚本
3. **mysqldump.exe**:这是MySQL的核心组件之一,用于创建数据库的结构和数据的备份。通过命令行界面,用户可以轻松地导出整个数据库或单个表,生成SQL脚本,便于在其他地方导入或作为恢复数据的备份。 这些文件的...
mysql 导出的脚本,运行perl 生成word文档,文档通表格存储数据字典
`mysqldump.exe` 是 MySQL 数据库管理系统中的一款重要命令行工具,它主要用于数据库的备份、导出和数据迁移。这款工具的功能强大且灵活,是数据库管理员日常工作中不可或缺的一部分。下面将详细介绍 `mysqldump` 的...
- `--complete-insert`: 生成包含完整INSERT语句的SQL文件,这对于插入数据量大的表可能不是最佳选择,因为可能导致单条INSERT语句过长而无法执行成功。 #### 示例解析 以下是一些具体的命令示例: 1. **备份...
在使用MySQL的`mysqldump`命令进行数据导出时,有几点需要注意,以确保数据的安全和完整。首先,当遇到导入时的`Duplicate entry`错误时,不要轻易使用`--force`参数来强行导入,因为这可能导致数据丢失。正确的处理...
* 重新加载(还原)备份文件,先建表后插入数据最后建立索引,减少了索引维护开销,加快了还原速度。 mydumper是一个第三方的逻辑备份工具,提供了多种参数来控制备份过程,包括备份原理、参数使用说明等。 ...
它能够生成SQL脚本,包含了创建数据库结构、插入数据等操作,使得数据可以在不同环境之间轻松转移。以下是对`mysqldump`命令的详细解释和实例: 1. **导出所有库**: 使用`--all-databases`选项可以导出所有数据库...
mysqldump.exe 在win下导mysql数据用
mysqldump可以生成SQL脚本,包含创建表、插入数据等操作,以便在需要时重新执行这些脚本来恢复数据库。 增量备份基于上一次备份的基础上只备份自上次备份以来更改的数据。这通常涉及到两个阶段:基于时间戳的增量...