通过排序修复?

use*_*084 6 mysql mysqldump

我有一个更新localhost的脚本,然后将更新的结果转储到remotehost:

mysqldump --skip-tz-utc --no-create-info --insert-ignore --host=localhost -u u -ppass db table --where=\"timeStamp > FROM_UNIXTIME( $time )\" | mysql -h remote -u u -ppass db
Run Code Online (Sandbox Code Playgroud)

有20条记录,对localhost的更新非常快(几秒钟),但转储到remotehost需要4分钟......当我查看mysql工作台时,它说远程主机的状态是"通过排序修复"和Info列是"/*!40000 ALTER TABLE"表'ENABLE KEYS*/".

这条消息意味着什么(为什么用这么少的记录转储到remotehost需要这么长时间)?

谢谢

Jef*_*and 7

mysqldump禁用索引,插入记录和重新启用索引.这意味着它会影响整个表格,包括我期望的基于时间的更多记录.

添加--skip-disable-keys到参数中mysqldump,应该停止发生.


Rol*_*DBA 7

mysqldump会在重新加载期间对表执行三项操作

禁用钥匙;

多个插入

启用键;

禁用密钥时,它实际上会禁用非唯一索引.

主键和唯一键立即加载.

启动ENABLE KEYS后,将使用"通过排序修复"构建所有非唯一索引;

如果绕过DISABLE KEYS和ENABLE KEYS,你会使事情变得更糟,因为主键,唯一键和非唯一键是逐行构建的.这在内部是一个麻烦的操作,MySQL必须执行FOR A FULL LOADING OF TABLE !!!

由于添加的数据非常少,因此建议使用"Autocracy"建议的--skip-disable-keys既明智又简洁.

BTW这仅适用于MyISAM表.InnoDB忽略了DISABLE KEYS和ENABLE KEYS.

  • 我觉得你让我更加困惑...你说如果我绕过禁用键我会让事情变得更糟,但后来告诉我1段后再做.我实施了Autocracy的解决方案....我应该做什么? (6认同)