Wyłącz autocommit
i ręcznie zatwierdź pod koniec wstawiania
Zgodnie z dokumentacją MySQL 8.0. (8.5.5 zbiorcze ładowanie danych dla tabel InnoDB )
Możesz zwiększyć prędkość INSERT, wyłączając automatyczne zatwierdzanie:
Innym sposobem na zrobienie tego w Laravel jest użycie Transakcje w bazie danych :
DB::beginTransaction()
// Your inserts here
DB::commit()
Użyj INSERT
z wieloma VALUES
Również zgodnie z dokumentacją MySQL 8.0 (8.2.5.1 Optymalizacja instrukcji INSERT
) możesz zoptymalizować szybkość INSERT, używając wielu VALUES
na jednej instrukcji wstawiania.
Aby to zrobić za pomocą Laravela, możesz po prostu przekazać tablicę wartości 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',
],
]);
Według dokumentacji może to być wielokrotnie szybsze.
Przeczytaj dokumentację
Oba linki do dokumentacji MySQL, które umieściłem w tym poście, zawierają mnóstwo wskazówek dotyczących zwiększania szybkości INSERT.
Unikaj używania Laravel/PHP do wstawiania
Jeśli źródłem danych jest (lub może być) plik CSV, możesz go uruchomić znacznie szybciej, używając mysqlimport
aby zaimportować dane.
Używanie PHP i Laravela do importowania danych z pliku CSV jest obciążeniem, chyba że musisz trochę przetworzyć dane przed wstawieniem.