MySQL:使用索引对大型表执行更新

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

晚上,

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

相关文章:

database-design - 有没有有用的数据库静态分析工具?

mysql - 如何优化 MySQL 数据库/查询

mysql函数计算两个日期之间的天数,不包括周末

mysql - 出现 1045 错误时,如何在 SQL 中导出运行查询的结果?

mysql - 如何在mysql数据库中生成序列号?

php - 防止搜索引擎访问特定的数据库字段

mysql - 在Mysql中处理多个索引时最好的策略是什么

google-app-engine - 如何以编程方式确定哪些 Datastore 索引出错?

mysql - 通过数字 ID 与字符串(例如 md5)ID 搜索条目之间的性能差异

java - 我收到有关 java.lang.String 无法转换为 JSONarray 的错误