【发布时间】:2017-10-23 18:25:23
【问题描述】:
我有一个从外部 API 获取数据并随后将其提交到数据库的代码:
protected function saveWidgetsToDatabase($widgetsDaily, Boost $boost, $date)
{
echo "Saving widgets to DB... ";
$widgets = Widget::all();
foreach ($widgetsDaily as $widgetDaily) {
$existingWidget = $widgets
->where('widget_id', $widgetDaily->id)
->where('date', $date)
->first();
if ($existingWidget === null)
$boost->widgets()->save(new Widget([
...
]));
else
$existingWidget->update([
...
]);
}
}
我的关系是一个Boost 有很多Widgets。现在,我面临的问题是瓶颈数据库保存/更新,因为只有当它具有相同的日期和 ID 时我才需要更新一个小部件,否则我需要创建一个新的。
我们谈论的是几千条记录,所以我相信where 子句非常密集。
我想进行批量保存,但我没有成功。
有没有机会让它更快?
【问题讨论】:
-
您是否将
widget_id和date编入索引? -
不,不是真的……这有帮助吗?
-
是的。索引有助于数据库更快地查找信息,并会加快您的
where查询。 -
请提供生成的SQL。
标签: php mysql performance laravel