私は外部のAPIからデータを取得し、その後DBにコミットし、コードを持っている:私はLaravelデータベースの最適化
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([
...
]);
}
}
関係は1 Boost
は多くのWidgets
を持っていることです。今、私が直面している問題は、同じ日付とIDを持つ場合にのみウィジェットを更新する必要があるため、ボトルネックDBの保存/更新です。そうでなければ、新しいものを作成する必要があります。
私たちは数千ものレコードについて話していますので、where
の節はかなり集中していると思います。
バッチ・セーブをしたいと思っていましたが、私はそれを作っていませんでした。
これを高速化する可能性はありますか?
'widget_id'と' date'のインデックスはありますか? – aynber
いいえ、本当は...助けてくれますか? – Norgul
はい。索引付けは、データベースが情報をより迅速に見つけ出すのを助け、 'where'クエリを高速化します。 – aynber