由于业务需要,要新建一个从库,由于数据量很大在导入数据的过程中,发现有一个processlist:/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;占用了很长时间,大概400多秒,等了几分钟查看进程还是这一条,还以为悲剧发生了,不会要重新备份吧(20多G啊),耐心等待终于有插入语句出现了,放心睡觉,看时间快两点了。

第二天查资料发现,mysql在使用mysqldump备份时对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER

TABLE tbl_name ENABLE KEYS

*/;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表。

从网上看到一篇文章:

有一个表 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: 0

2. 如果是用以下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: 0

mysql>ALTER TABLE tbl2 ENABLE KEYS;

Query OK, 0 rows affected (44.55 sec)

从上面的测试结果来看, 在大批量导入时先禁用索引, 在完全导入后, 再开启索引, 一次性完成重建索引的效率会相对高很多, 经过反复几次测试, 感觉后者基本能比前者快 1.2 倍左右. 这也就是 LOAD DATAL INFILE 相对较快的原因之一.

mysql disable keys_MySQL DISABLE/ENABLE KEYS的作用相关推荐

  1. mysql表disable_[MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用

    [MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用 作/译者:叶金荣 来源:http://imysql.cn 转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 有 ...

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

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 有一个表 tbl1 的结构如下: CREATE TABLE `t ...

  3. 使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs

    使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs.如果删除这个索引就会提示错误error 1553:cann't drop index-:nee ...

  4. mysql 数据缓冲区,MySQL写入缓冲区在数据库中的作用( Change Buffer )

    原标题:MySQL写入缓冲区在数据库中的作用( Change Buffer ) 介绍另外一种重要的数据变更日志,也就是InnoDB change buffer.Change buffer的主要目的是将 ...

  5. U3D-3D MAX Biped导出.fbx到Unity的Humanoid的骨架不匹配(Disable Triangle Pelvis, Enable Triangle Neck)

    authro : jave.lin date : 2018-02-02 如题所述 因为本人不熟悉3D MAX,也不熟悉3D项目,目前是第一次尝试制作3D项目,途中遇到好大的坑,记录一下,算是积累.巩固 ...

  6. mysql init file_mysql中参数--init-file的作用是什么呢?

    需求描述: 今天在修改测试环境mysql数据库中root用户密码的时候,用到了--init-file参数, 所以,就在这里说下该参数的作用. 概念解释: 参数:--init-file=file_nam ...

  7. mysql 配置环境变量的方法及作用

    在谈mysql配置环境变量之前,先谈一下windows环境变量的作用,有时候在windows cmd窗口运行命令时,经常会出现"XXX不是内部或外部命令的提示" 原因是系统没有找到 ...

  8. mysql触发器发送curl请求_mysql触发器作用,好处和curl

    什么是触发器: 触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行. 触发器有什么作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. 2.审计.可以跟踪用户对数据 ...

  9. mysql server_id作用_在MySQL中设置`server-id`变量不起作用

    我一直在努力建立两个数据库作为主人和奴隶. 但我的奴隶服务器没有运气, 我遇到的问题是设置server-id变量. 无论我在哪里定义它(我查看了可能允许我定义变量的所有可能的cnf文件) 我试着像这样 ...

最新文章

  1. 【阿里云课程】图神经网络基础:图的应用、表示与图卷积
  2. 迷惑!博士生发Nature造假,怕被调查扔掉实验室万元电脑
  3. 湖北大学计算机科学与技术怎么样,湖北大学(专业学位)计算机技术考研难吗
  4. 【精辟】socket阻塞与非阻塞,同步与异步,select,pool,epool
  5. Java继承_30道最常问的Java基础面试题
  6. 大华管理平台用户名_助力制造苏州紫光云引擎携手大华精密,共建精密机加数字化样板工厂...
  7. iocomp iPlot使用说明13 Limits绘图界限
  8. 远程办公:常用的远程协助软件,你都知道吗?
  9. android 模板引擎,template.js模板引擎
  10. 支付宝支付对账单java_java下载支付宝对账单,实现与支付宝实收对账和日清日结对账...
  11. 什么是HTTO协议?来看!
  12. 使用wkhtmltopdf 将网页转PDF
  13. 如何关闭135端口、139端口、445端口
  14. NBD Network Block Device
  15. proxifier 出现错误代码10060处理
  16. 【Unity XR】Unity开发OpenXR
  17. 原理分析:安卓手机桌面长按分享,安卓发送软件apk,qq发送软件apk 原理
  18. Linux配置拨号服务器
  19. Linux下定时删除指定目下n天前的文件
  20. Java项目:SSM员工考勤管理系统

热门文章

  1. 【翻译】Densely Connected Convolutional Networks
  2. try catch在for循环外面还是里面
  3. ajax遮罩层html,ajax遮罩层
  4. 国税总局金税三期工程-goldengate
  5. 谱聚类(spectral clustering)及其实现详解
  6. 信息学奥赛一本通(1199:全排列)
  7. 从中序与后序遍历构造二叉树
  8. 地质灾害安全远程监测系统
  9. 每个业务部门都是一个利润中心,人力资源管理部门也不例外
  10. 实验二、8位流水灯电路设计