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

MySQL:在具有索引的大型表上执行更新,mysql,database-design,database-indexes,database-optimization,Mysql,Database Design,Database Indexes,Database Optimization,晚上, 我有一个大而简单的表,有近3000万行。该表具有大多数列的索引。对它执行任何更新都需要很长时间,我想知道在完成对表的更改后删除索引并重新构建它们是否是一个好主意 我问这个问题的原因是因为我在这里读过一些帖子,人们无法在一个大表上重建索引。但是,我不明白为什么会这样,因为我可以在20分钟内从一个2.2GB的文本文件导入这个表 该表由几个小整数和varchar组成 我运行的更新查询如下所示: UPDATE census SET rCo = 11470 WHERE rCo = 'Zet';

晚上,

我有一个大而简单的表,有近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

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

请发布更新查询。这可能只是一个性能不佳的查询。我在查询中添加了det.s,以及它们的运行位置。我有很多查询要在表上运行以更新它。我用一种过时的15年前的数据格式FolioViews构建了它。正如你可以猜到的,这是一个完全混乱的>无论如何。我重新启动了我的电脑,这似乎成功了。经过6个小时的数据处理和数据插入后,它一定是陷入了一个糟糕的境地:)谢谢你的时间。