sql >> データベース >  >> RDS >> Mysql

Laravel5.7で100万行を挿入/更新する最速の方法

    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ファイルからデータをインポートすることは、挿入する前にデータ処理を行う必要がない限り、オーバーヘッドです。



    1. アークウェアを選択する5つの理由

    2. MySQL、SQLを使用してテーブルに列が存在するかどうかを確認します

    3. Hibernate:自己参加の混乱?

    4. フィールドPRICEをintまたはfloatintとしてデータベースに保存する必要がありますか?