`

[MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用

阅读更多

[MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用

作/译者:叶金荣

来源:http://imysql.cn

转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

有一个表 tbl1 的结构如下:

CREATE TABLE `tbl1` (  `id` int(10) unsigned NOT NULL auto_increment,  `name` char(20) NOT NULL default '',  PRIMARY KEY  (`id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;该表里已经存在了200万条记录.

现在, 需要把 tbl1 中的所有记录全部导到另一个完全相同的表 tbl2 中去.

1. 如果采用以下传统的方式, 则执行时间为: 98.01s

mysql>INSERT INTO tbl2 SELECT * FROM tbl1;Query OK, 2000000 row affected (1 min 38.01 sec)Records: 2000000  Duplicates: 0  Warnings: 02. 如果是用以下SQL语句, 则执行时间为: 80.85s (36.30 + 44.55)

mysql>ALTER TABLE tbl2 DISABLE KEYS;Query OK, 0 rows affected (0.00 sec)mysql>INSERT INTO tbl2 SELECT * FROM tbl1;Query OK, 2000000 row affected (36.30 sec)Records: 2000000  Duplicates: 0  Warnings: 0mysql>ALTER TABLE tbl2 ENABLE KEYS;Query OK, 0 rows affected (44.55 sec)从上面的测试结果来看, 在大批量导入时先禁用索引, 在完全导入后, 再开启索引, 一次性完成重建索引的效率会相对高很多, 经过反复几次测试, 感觉后者基本能比前者快 1.2 倍左右. 这也就是 LOAD DATAL INFILE 相对较快的原因之一.

分享到:
评论

相关推荐

    MySQL的备份和恢复机制

    40000 ALTER TABLE table ENABLE KEYS */; 语句。 * --extended-insert = true|false:默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。 * --hex-...

    18 SQL优化--其他SQL的优化.doc

    根据提供的文档标题、描述、标签以及部分内容,我们可以深入探讨关于SQL优化的相关知识点,特别是针对MySQL中的表分析、检查、优化以及其他SQL语句的优化策略。 ### 表分析、检查与优化 #### 表分析(Analyze ...

    MySQL掌握备份恢复工具mysqldump实践

    40000 ALTER TABLE table ENABLE KEYS */;` 语句。这样可以在插入所有数据后再重建索引,提高插入速度。此选项仅适用于MyISAM表。 5. **--extended-insert=true|false** - 默认情况下,`mysqldump`启用`--complete...

    提高mysql插入数据的速度.pdf

    `来禁用索引,使用`ALTER TABLE table_name ENABLE KEYS;`来重新启用索引。 4. 使用LOAD DATA INFILE命令: - 与使用多条INSERT语句相比,使用LOAD DATA INFILE命令可以更快地将数据从文本文件加载到表中。 5. ...

    php.ini-development

    To disable this feature set this option to empty value ;user_ini.filename = ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) ;user_ini.cache_ttl = ...

    MySQL 数据库优化的具体方法说明

    DISABLE KEYS / ENABLE KEYS来临时关闭索引更新,加快数据导入速度。而对于InnoDB表,虽然无法直接通过这种方式加速,但可以通过排序数据按主键顺序插入,关闭唯一性校验(SET UNIQUE_CHECKS=0),以及关闭自动提交...

    mysql学习笔记

    - **禁用外键**: `ALTER TABLE 表名 DISABLE KEYS;` - **启用外键**: `ALTER TABLE 表名 ENABLE KEYS;` **4. 删除表** - **语法**: `DROP TABLE 表名;` - **示例**: `DROP TABLE example;` #### 三、数据的...

    mysql如何优化插入记录速度

    使用`ALTER TABLE table_name DISABLE KEYS`来禁用索引,插入完成后,通过`ALTER TABLE table_name ENABLE KEYS`来重新启用索引。但需要注意,对于空表,MyISAM会在导入数据后自动创建索引,因此禁用索引的操作只...

    提高mysql插入数据的速度归类.pdf

    3. **禁用与启用索引**:对于非空的 MyISAM 表,在导入数据前使用 `ALTER TABLE table_name DISABLE KEYS`,导入完成后用 `ALTER TABLE table_name ENABLE KEYS` 来重新构建索引,可以加速数据导入,尤其是当处理...

    mysql 数据插入优化方法

    - 对于非空的MyISAM表,使用`ALTER TABLE table_name DISABLE KEYS`禁用索引,然后使用`LOAD DATA INFILE`导入数据,最后执行`ALTER TABLE table_name ENABLE KEYS`重新启用索引。对于空表,`LOAD DATA INFILE`会...

    mysql学习记录

    - **性能优化**:当导入大量数据时,可以考虑关闭索引(使用`ALTER TABLE table_name DISABLE KEYS`),待数据导入完成后,再重新启用索引(使用`ALTER TABLE table_name ENABLE KEYS`)以提高导入速度。 - **使用...

    MySQL性能优化指南

    MySQL性能优化是数据库管理的重要环节,它涉及到数据库的运行效率和资源利用率。本文主要探讨了三个关键的优化方法:定期分析表和检查表、定期优化表以及常用的SQL语句优化。 1. 定期分析表和检查表 分析表...

    浅谈mysqldump使用方法(MySQL数据库的备份与恢复)

    - `--disable-keys`: 在导入时不重建索引,提高导入速度,但可能导致数据不一致。 - `--enable-cleartext-plugin`: 使用明文密码插件进行身份验证。 - `--extended-insert`: 默认使用,生成多行INSERT语句以提高性能...

    有关mysql优化的一些东东整理

    8. **导入大数据优化**:对于MyISAM,使用`ALTER TABLE tblname DISABLE KEYS`先禁用索引,加载数据后再`ENABLE KEYS`。对于InnoDB,可设置`UNIQUE_CHECKS=0`和`AUTOCOMMIT=0`提高导入速度。 9. **INSERT优化**:`...

    高效处理MySQL中的大数据量插入与查询策略

    为了克服这些挑战,本文将深入探讨一系列策略和技术,旨在帮助优化这些操作,确保数据库的高性能和快速响应。 #### 1. 插入大数据量 当插入大量数据时,关键目标是减少事务的锁定时间,并提高插入效率。以下是一些...

    mysqldump备份还原和mysqldump导入导出语句大全详解

    - `--disable-keys`和`--enable-keys`在导出前禁用和启用索引,加快导出速度,适用于MyISAM表。 - `--opt`选项组合了多种性能优化选项,包括`--quick`,它使mysqldump直接从服务器获取并输出记录,避免内存缓存大表...

    解析优化MySQL插入方法的五个妙招

    在数据库管理中,优化MySQL插入方法对于提升性能和效率至关重要,尤其是在处理大量数据时。本文将探讨五个优化MySQL插入操作的策略。 1. **批量插入(Multi-row INSERT)** 当需要插入多行数据时,使用批量INSERT...

Global site tag (gtag.js) - Google Analytics