通过排序修复?

时间:2011-02-15 02:08:56

标签: 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

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

这条消息是什么意思(为什么用这么少的记录转储到远程主机需要这么长时间?)

THX

2 个答案:

答案 0 :(得分:7)

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

--skip-disable-keys添加到mysqldump的参数中,这应该会停止发生。

答案 1 :(得分:7)

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

禁用钥匙;

多个插页

ENABLE KEYS;

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

主键和唯一键立即加载。

启动ENABLE KEYS后,将使用“按排序修复”构建所有非唯一索引;

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

由于添加了如此少的数据,因此建议使用“Autocracy”这样的--skip-disable-keys既明智又简洁。

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