缓慢插入和更新到大 table

Slow insert & update into large table

所以我写了一个脚本,将数据从超过 1.5m 行的 csv 文件导入到 mysql innodb table,它将扫描 CSV,然后对于每个 CSV 行:

然后转到 CSV 中的下一行并再次执行上述步骤。

问题是,要导入数据的table也有1.5m的记录,导致导入数据很慢。我尝试了脚本并看到:

有没有什么办法可以让导入进度更快?

问题的根源是这样的:

您在 table 中搜索要插入的键,但是当您执行插入时,数据库管理系统也会执行完整性检查,即确保没有 NULL 值标记为 NOT NULL 的列,检查是否未违反外键约束,并且(在这种情况下最重要)确保主键和唯一字段是唯一的。

这意味着当您执行 INSERT 时,DBMS 将(除其他事项外)搜索该项目,从而使您之前的搜索变得多余。

您可以将 3 个操作替换为一个操作,如下所示:

INSERT INTO tablename(column1,column2...) 
VALUES (v1,v2,....) 
ON DUPLICATE KEY UPDATE SET column1=v1...

知道如果你说 column1=VALUES(column1) 这意味着“使用我在插入的 VALUES() 部分指定的值。

也很有用