Деактивирайте autocommit
и ръчно ангажимент в края на вмъкването
Според MySQL 8.0 docs. (8.5.5 Групово зареждане на данни за таблици InnoDB )
Можете да увеличите скоростта на INSERT, като изключите автоматичното записване:
Друг начин да го направите в Laravel е да използвате Транзакции в базата данни :
DB::beginTransaction()
// Your inserts here
DB::commit()
Използвайте INSERT
с множество VALUES
Също според документите на MySQL 8.0 (8.2.5.1 Оптимизиране на инструкции INSERT
) можете да оптимизирате скоростта на INSERT, като използвате множество VALUES
върху един израз за вмъкване.
За да го направите с 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 файл е излишно, освен ако не трябва да извършите някаква обработка на данни, преди да ги вмъкнете.