autocommit
を無効にします 挿入の最後に手動でコミットします
MySQL8.0ドキュメントによると。 (8.5.5バルクデータの読み込みInnoDBテーブルの場合 )
自動コミットをオフにすることで、INSERTの速度を上げることができます:
Laravelでそれを行う別の方法は、データベーストランザクション を使用することです。 :
DB::beginTransaction()
// Your inserts here
DB::commit()
INSERT
を使用する 複数のVALUES
また、MySQL 8.0ドキュメント(8.2.5.1INSERTステートメントの最適化
)複数のVALUES
を使用して、INSERT速度を最適化できます 単一の挿入ステートメントで。
Laravelでそれを行うには、値の配列をinsert()
に渡すだけです。 方法:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
ドキュメントによると、それは何倍も速くなる可能性があります。
ドキュメントを読む
私がこの投稿に載せた両方のMySQLドキュメントリンクには、INSERT速度を上げるためのヒントがたくさんあります。
挿入にLaravel/PHPを使用しないでください
データソースがCSVファイルである(またはその可能性がある)場合は、 mysqlimport
データをインポートします。
PHPとLaravelを使用してCSVファイルからデータをインポートすることは、挿入する前にデータ処理を行う必要がない限り、オーバーヘッドです。