2

晚上,

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

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

该表由几个小整数和 varchars 组成。

我运行的更新查询如下:

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

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

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

4

1 回答 1

2

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

另一方面,我很确定您应该建立一个全新的表:

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

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

于 2012-06-01T00:52:25.890 回答