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.