Copy & Paste Engineer

【Laravel】大量INSERTする際に chunk を使おう

【Laravel】大量INSERTする際に chunk を使おう

Laravel で大量INSERTする際にエラーが出たり、遅くなったりします。そういう時は chunk を使用します。

できるだけ大量データを入れる際は chunk を使用してください。 僕の経験では一括で入れようとするとDBがエラーを起こしたり、挿入によるテーブルロックでDBが遅くなったりします。

確認環境情報

サンプル

サンプルは1万件のデータを500件ずつに分割してデータ挿入を行います。

<?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());
}

参考