【问题标题】:trying to update/ insert 20k records in mysql but its working very slow any suggestions?试图在 mysql 中更新/插入 20k 条记录,但它的工作速度很慢有什么建议吗?
【发布时间】:2014-11-16 18:08:44
【问题描述】:

试图在 mysql 中更新/插入 20k 条记录,但它的工作速度很慢,有什么建议吗? 我的服务器配置是 数据库引擎:innodb。 服务器:亚马逊 Ec2 内存:7GB

我在 20k 条记录上使用了 for 循环,并根据我的条件插入和更新记录。 插入/更新记录大约需要 45 到 60 分钟。

【问题讨论】:

  • 您必须进行批量插入或批量更新,这会更快
  • 你能试试我的回答吗

标签: php mysql amazon-ec2 innodb


【解决方案1】:

您必须使用批量插入

  INSERT INTO table_name ( field1, field2,...fieldN )
                   VALUES
                   ( a1, a2,...aN ),( b1, b2,...bN ),..;

连接行值并将其称为单个查询

【讨论】:

  • 谢谢,我必须插入计算的金额,插入后需要根据设置更新与税收相关的字段,这就是我不使用批量插入的原因
  • 然后在这里发布您的代码。我们怎么知道你在插入后要做什么
【解决方案2】:

如果您分别迭代和更新每条记录,这是正常的。

有一个更快的方法:

遍历数据以插入并使用一条sql语句设置要更新的最大包(1k):

INSERT INTO table (field,...) VALUES (va1,...), (vb1,...) ON DUPLICATE KEY UPDATE field=VALUE(field),ID=LAST_INSERT_ID(ID);ID is your primary key;

这种方式只需少量插入,您就可以更新或创建新行并检查主索引(不会因每次重复插入而膨胀)。

这应该可以将事情加速到不到一分钟。

【讨论】:

  • 同一条记录插入后有3个更新查询
  • 如果您在该表上设置了正确的UNIQUE() 索引,则只能使用该INSERT 语句并批量执行。 SQL 将完成剩下的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2014-02-27
  • 1970-01-01
  • 2013-04-20
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多