Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najszybszy sposób na wstawienie/aktualizację miliona wierszy w Laravel 5.7

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menu drzewa budowania PHP / MySQL

  2. Zapytanie SQL, aby uzyskać wartości kolumn, które odpowiadają wartości MAX innej kolumny?

  3. Nowe rekordy od ostatniego zapytania w MySQL View

  4. Jak przechowywać obraz w MySQL?

  5. Jak wykonać zapytanie o pola zawierające dany tekst w MySQL?