sql >> Databáze >  >> RDS >> Mysql

Nejrychlejší způsob, jak vložit/aktualizovat milion řádků v Laravel 5.7

Zakažte autocommit a ručně potvrdit na konci vložení

Podle dokumentů MySQL 8.0. (8.5.5 Hromadné načítání dat pro tabulky InnoDB )

Rychlost INSERT můžete zvýšit vypnutím automatického potvrzení:

Jiný způsob, jak to udělat v Laravelu, je použít Databázové transakce :

DB::beginTransaction()

// Your inserts here

DB::commit()

Použijte INSERT s více VALUES

Také podle dokumentů MySQL 8.0 (8.2.5.1 Optimalizace příkazů INSERT ) můžete optimalizovat rychlost INSERT pomocí více VALUES na jediném příkazu insert.

Chcete-li to provést pomocí Laravelu, stačí předat pole hodnot do insert() metoda:

DB::table('your_table')->insert([
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
]);

Podle dokumentů to může být mnohonásobně rychlejší.

Přečtěte si dokumenty

Oba odkazy na dokumenty MySQL, které jsem vložil do tohoto příspěvku, obsahují spoustu tipů na zvýšení rychlosti INSERT.

Pro vkládání nepoužívejte Laravel/PHP

Pokud je vaším zdrojem dat (nebo může být) soubor CSV, můžete jej spustit mnohem rychleji pomocí mysqlimport importovat data.

Použití PHP a Laravel k importu dat ze souboru CSV je režie, pokud před vložením nepotřebujete provést nějaké zpracování dat.



  1. Jak opravit konflikt řazení v dotazu SQL Server?

  2. Jak Asin() funguje v PostgreSQL

  3. Získejte správnou část řetězce v SQL Server (T-SQL)

  4. Jak může nastavení jazyka ovlivnit výsledky FORMAT() na serveru SQL (příklady T-SQL)