我有一台运行 Ubuntu 10.04 的服务器,并通过包安装了 Mysql 5.1x。该系统有 128GB 内存,8 个内核,并有 4TB 的可用空间,用于存储 Mysql 和 Mysql tmp。
我有一个这样的 MyISAM:
CREATE TABLE `data_store` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uniqname` varchar(150) NOT NULL,
`data` blob,
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
我插入了 8 亿条记录(插入前大约有 350GB 数据),然后尝试添加以下索引:
ALTER TABLE data_store DISABLE KEYS;
ALTER TABLE data_store ADD INDEX uniqname_index (uniqname);
ALTER TABLE data_store ENABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
(关于DISABLE KEYS命令,我看到在其他地方建议在插入数据之前使用,并且由于该命令从未使用过ENABLE KEYS,我认为它对我没有用处。我主要只是在我对我的描述中进行了详尽的描述我在做。)
当我开始索引作业时,显示的第一个状态SHOW PROCESSLIST是“复制到 tmp 表”。
几个小时后,我检查了 bac,即使在 24 小时后,状态仍保留在“使用密钥缓存修复”消息上。我尝试在稍旧的服务器上运行该作业,3 天后,它仍然保持“使用密钥缓存修复”状态。因此,我在这台较新的机器上取消了 create-index …