我有一个包含1000000条记录的mysql数据库表。我想更新每一行中的一列。
--我试过:
public function methodWorking()
{
$properties = Property::with('requests')->get();
foreach ($properties as $property) {
$property->number_of_request = count($property->requests);
$property->save();
}
}
这是一个工作,但,它是非常糟糕的表现。
我想写一个这样的代码:
public function methodExpect()
{
$properties = Property::with('requests')->get();
$property_array = [];
foreach ($properties as $property) {
$property->number_of_request = count($property->requests);
$property_array[] = $property;
}
Property::save($property_array);
}
能用拉拉吗?
谢谢。
发布于 2018-03-18 23:15:42
如我所知,没有办法用MySQL在一个查询中进行批量更新。您可以在循环中使用一些东西,比如将Property::save($property_array);
放入foreach
中。
有关详细信息,请参阅这
发布于 2018-03-19 07:36:45
更改所有(或大多数)行通常表示架构设计不佳。您想告诉我们列包含了什么以及为什么需要进行大规模的更改吗?
考虑从表中删除该列--然后以其他方式提供值。
是的,百万行表的UPDATE
需要很长时间。这是因为每一行的旧副本都保留在上面,以防出现ROLLBACK
。
若要对表进行分块,将其分成可管理的部分,请参见分块
发布于 2018-09-01 07:33:01
您可以使用LaravelBatch,它非常有用(在10000条记录上测试)
https://stackoverflow.com/questions/49357032
复制相似问题