更新或插入一个包含6000万条目的mysql数据库
我有一个mysql数据库,它有一个大约6000万条的表,主键是“x”。我有一个数据集(csv文件),其中也有大约6000万条条目。此数据集还具有索引“x”。对于mysql表和dataset共有的键“x”的值,mysql表中的相应条目只会随着计数器变量的增量而更新。将插入数据集中的新数据更新或插入一个包含6000万条目的mysql数据库,mysql,database,optimization,Mysql,Database,Optimization,我有一个mysql数据库,它有一个大约6000万条的表,主键是“x”。我有一个数据集(csv文件),其中也有大约6000万条条目。此数据集还具有索引“x”。对于mysql表和dataset共有的键“x”的值,mysql表中的相应条目只会随着计数器变量的增量而更新。将插入数据集中的新数据 在一个简单的串行执行中,我们尝试更新条目(如果存在),否则insert大约需要8小时才能完成。如何提高整个过程的速度?计划A:IODKU,正如@Rogue建议的那样 方案B:两个SQL;它们可能会运行得更快,因为
在一个简单的串行执行中,我们尝试更新条目(如果存在),否则insert大约需要8小时才能完成。如何提高整个过程的速度?计划A:IODKU,正如@Rogue建议的那样 方案B:两个SQL;它们可能会运行得更快,因为8小时的一部分时间是在崩溃时收集大量的撤销信息。与这两个查询非常接近 方案C:遍历这对表,使用其中一个表的
主键
,将IODKU分成块,比如说1000行。查看我的代码(并将其从DELETE
调整为IODKU
)
在方案B和方案C中,启用自动提交
,这样就不会建立一个庞大的重做日志
计划D:在使用连接合并两个表时构建一个新表。以原子弹结尾
RENAME TABLE real TO old,
new TO real;
DROP TABLE old; -- when happy with the result.
方案E:方案D+插入的分块。。。选择real JOIN tmp…
插入到。。。关于重复密钥更新
您所说的数据集是什么意思?CSV文件?数据库没有条目,但数据库中的表有条目。您的术语不清楚。是的数据集是csv文件。我说的数据库是指数据库中的表。谢谢。让我试试这些,看看我能得到什么样的效率。