表users
包含数百万数据users
具有ID、竞争日期、第三方ID等列thirdparty_id
是我必须为所有用户更新的新列
查找thirdparty_id过程
对于每个用户,存在对应的订单表,我们必须从该订单表中获取最新订单,我们将从该订单表中获得一个值,基于该值,我们可以计算某个速率
我们可以在另一个表中搜索该速率,从那里我们将得到thirdparty_id
我已经为个人用户做了一切,它的工作很好
现在我的问题是如何为数百万用户执行此操作?
我正在使用laravel
该过程获取具有thirdparty_id为空所有用户,并调用公式函数来查找id并更新
但是获取所有意味着数百万的数据在一个查询?所以如果我给限制什么的最大限制我可以给予?
还有哪些其他选项可供执行?
我使用的查询
select id as userid from users where thirdparty_id is null limit {some limit}
in foreach of this
select amount from orders wehere user_id =userid order by created desc limit 1
some wiered formula with amount will give `rate`
select id from third party where start_rate > rate and end_rate<rate
update users set thirdparty_id=id where id=userid
2条答案
按热度按时间lo8azlld1#
您可以使用chunk:www.example.comhttps://laravel.com/docs/9.x/eloquent#chunking-results
就像这样:
wb1gzix02#
对于这类问题,我将使用存储过程来进行更新,而不是使用PHP之类的语言。
这样做,迁移存储过程在MySQL服务器内运行,并且您可以抛弃所有问题,如PHP执行时间、内存限制、Apache超时等。