laravel 1万件のテストデータインサート
laravelのファクトリーを利用してランダムにデーターを作成し1万件のテストデーターを挿入するのにかかった時間等を書いていきます
環境
laravel 8.x
使用するファクトリーとテーブルは以下の通りです。
1.ファクトリーのクリエイトメソッドで挿入
User::factory()->count(10000)->create();
結果はこちら
約723秒で約12分かかりました。
2.ちょっと工夫して1万件のテストデータを作成してから一括で挿入
コードはこんな感じ
$users = User::factory()->count(10000)->make();
User::insert($users->toArray());
結果はこちら
633秒で約10.5分かかりました。
3.分割して挿入してみた。5000件ずつ
4.分割して挿入してみた。1000件ずつ
分割してみても1万件一括の時と比べて有意差はほとんどなしという結果
まとめ
1万件くらいならどっちでもそれほどかわりないが一括挿入の方が多少早い。
ファクトリーのクリエイトメソッドは一件ずつデーターを挿入している
ファクトリーのメイクメソッドはインスタンスを生成するが挿入はしていない。
毎回インサートしないためインスタンスが一括で生成して一括で挿入できるか
ファクトリーのメイクメソッドの方が早い。おそらくバルクインサートみたいのができていると思われる
余談
10万や100万のテストデータを作成して検証しようしてみましたが、見事にメモリー不足で飛びました。
以上
作成日:2021-03-14
更新日:2021-03-24