MySQL:在带有索引的大表上执行更新

时间:2012-06-01 00:40:07

标签: mysql database-design database-indexes database-optimization

晚上,

我有一个大而简单的表,有近3000万行。该表具有大多数列的索引。它需要很长时间来执行任何更新,我想知道删除索引并在完成对表的更改后重新构建它们是个好主意吗?

我问的原因是因为我在这里读了一些人们无法在大桌子上重建索引的帖子。但是,我不明白为什么这应该是因为我可以在20分钟内从2.2GB文本文件中导入此表。

该表由一些小的int和varchars组成。

我运行的更新查询类似于:

UPDATE census SET rCo = 11470 WHERE rCo = 'Zet';

它们并不太慢,但我目前正在将varchar(4)中的一个字段更改为varchar(8),这需要很长时间。

我从命令行(Linux)运行了更新查询。

1 个答案:

答案 0 :(得分:2)

我认为你应该保留索引,因为你在where子句中使用它。

另一方面,我很确定你应该建立一个全新的桌子:

CREATE TABLE census_2 (...) 
SELECT ..., IF(rCo = 'Zet', 11470, rCo) FROM census

然后删除旧的,+在新的AFTERWARDS上重新创建索引。