Php 如何高效更新100000条记录的MySQL数据库

Php 如何高效更新100000条记录的MySQL数据库,php,mysql,Php,Mysql,我必须从PHP更新一个100000+MySQL数据库,该数据库从API提取数据。如果我当时试着做5000多件事,那就失败了 我认为最好的方法可能是使用一个限制为0,5000的更新查询,然后在这些记录更新的时间上加上时间戳。然后,选择下一个5000,其中上次更新的时间距离当前时间超过20分钟 任何人都可以提供有关如何构造此查询的帮助吗?或者这种方法不是最优的?创建一个临时表,多次插入更新数据,然后 UPDATE `table`, `tmp` SET `table`.`column` = `

我必须从PHP更新一个100000+MySQL数据库,该数据库从API提取数据。如果我当时试着做5000多件事,那就失败了

我认为最好的方法可能是使用一个限制为0,5000的更新查询,然后在这些记录更新的时间上加上时间戳。然后,选择下一个5000,其中上次更新的时间距离当前时间超过20分钟


任何人都可以提供有关如何构造此查询的帮助吗?或者这种方法不是最优的?

创建一个临时表,多次插入更新数据,然后

UPDATE `table`, `tmp`
    SET `table`.`column` = `tmp`.`column`
    WHERE `table`.`id` = `tmp`.`id`;

因此,这就是我所采用的解决方案,无论正确与否,它都是有效的。因此,为了重述这个问题,我有10万行,我需要循环这些行,并将用户ID传递给返回json提要的API

我使用返回的数据更新每个记录。由于某种原因,这会失败,可能是因为超时或服务器500错误,我认为这是由于API造成的。因此,我没有选择所有100k REORD,而是选择5k(限制0,5000),添加一个名为“updated”的列,并在更新后将其标记为true

我一直这样做,直到所有记录都更新。发生这种情况时,我将更新的列设置为false,然后再次启动该过程。此脚本每30分钟在chron作业上运行一次,并且似乎运行良好。我想我可以首先发现它超时的原因,但我怀疑这可能是一个PHPINI问题(超时设置),我无法访问它

谢谢


乔纳森“失败”是怎么做到的?查询是什么?如果由于超时而失败,您可以尝试而不是胡闹时间戳,我只是临时添加一个额外的列。但首先,您会遇到什么错误?对于一个小型数据库,为什么不一次做一个记录呢?我会遇到一个内容编码错误或HTTP错误500内部服务器错误,我认为这是由于API造成的,或者可能是由于超时。我将如何使用额外的列?感谢您的关注,我不认为这是mysql的问题,更重要的是我正在使用的APi正在失败,一次不能处理超过5000个。所以我在寻找一种方法,将100000条记录分为5000批,并在一天中按设定的时间间隔进行循环。谢谢乔纳森