【Laravel】大量INSERTする際に chunk を使おう
Laravel で大量INSERTする際にエラーが出たり、遅くなったりします。そういう時は chunk
を使用します。
できるだけ大量データを入れる際は chunk
を使用してください。
僕の経験では一括で入れようとするとDBがエラーを起こしたり、挿入によるテーブルロックでDBが遅くなったりします。
確認環境情報
サンプル
サンプルは1万件のデータを500件ずつに分割してデータ挿入を行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php
$inserts = [];
// テスト用データの作成
for($i = 0; $i < 10000; $i++){
$inserts[] = [
'id' => $i,
'value' => str()->random(16),
]
}
$insertData = collect($inserts);
// 500件ずつデータを入れる
foreach ($insertData->chunk(500) as $chunk) {
Sample::insert($chunk->toArray());
}
|
参考