mysql - 更新或插入具有 6000 万条条目的 mysql 数据库

标签 mysql database optimization

我有一个 mysql 数据库,其中有一个表,其中包含大约 6000 万个条目,主键为“x”。我有一个数据集(csv 文件),其中也有大约 6000 万个条目。该数据集还有索引“x”。对于 mysql 表和数据集共有的键“x”的值,mysql 表中的相应条目只会随着计数器变量的增量而更新。将插入数据集中的新数据。

一个简单的串行执行,其中我们尝试更新条目(如果存在)或插入,大约需要 8 小时才能完成。我可以做什么来提高整个过程的速度?

最佳答案

A 计划:IODKU,正如 @Rogue 建议的那样。

B 计划:两个 sql;它们可能会运行得更快,因为 8 个小时的一部分时间是在收集大量的撤消信息,以防发生崩溃。 normalization section接近这两个查询。

计划 C:遍历这对表,使用其中一个表的主键来执行 IODKU,例如 1000 行。看我的Chunking代码(并将其从 DELETE 调整为 IODKU)。

在计划 B 和 C 中,启用自动提交,这样就不会建立巨大的重做日志。

计划 D:在使用 JOIN 合并两个表时构建一个新表。以原子结束

RENAME TABLE real TO old,
             new TO real;
DROP TABLE old;   -- when happy with the result.

计划 E:计划 D + INSERT ... SELECT real JOIN tmp ... 的分块 ...

关于mysql - 更新或插入具有 6000 万条条目的 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43712897/

相关文章:

javascript - 表内数据分组

java - Hibernate中如何进行继承?

sql - 如何在启用 FTS3 的情况下将二进制数据存储在 SQLite 表中?

java - 如何检查 double 是否为空?

php - Mysql Order By Optimization 有两个索引

时间戳列上的 MySQL 索引不用于大日期范围

MySQL 按多个平均和不同条件进行分组

mysql - 查询以从 3 个不同的表中获取具有计数的不同键的数据

java - 如何在 OneToMany 关系中将 null 设置为外键列,Hibernate

具有 40 多个列的 mysql 表