晚上,
我有一个大而简单的表,有近 3000 万行。该表对大多数列都有索引。对它执行任何更新需要很长时间,我想知道在完成对表的更改后删除索引并重新构建它们是否是一个好主意?
我问的原因是因为我读过这里的一些帖子,其中人们无法在大表上重新构建索引。但是,我不明白为什么会这样,因为我可以在 20 分钟内从 2.2GB 文本文件导入此表。
该表由一些小整数和 varchar 组成。
我运行的更新查询如下:
UPDATE census SET rCo = 11470 WHERE rCo = 'Zet';
它们并不太慢,但我目前正在将其中一个字段从 varchar(4) 更改为 varchar(8),这需要很长时间。
我从命令行 (Linux) 运行了更新查询。
最佳答案
我认为您应该保留索引,因为您在 where 子句中使用它。
另一方面,我很确定您应该建立一个全新的表:
CREATE TABLE census_2 (...)
SELECT ..., IF(rCo = 'Zet', 11470, rCo) FROM census
然后删除旧索引,然后在新索引上重新创建索引。
关于MySQL:使用索引对大型表执行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843058/