Mysql
 sql >> база данни >  >> RDS >> Mysql

Най-бързият начин за вмъкване/актуализация на милион реда в Laravel 5.7

Деактивирайте 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 файл е излишно, освен ако не трябва да извършите някаква обработка на данни, преди да ги вмъкнете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework създава име на таблица за множествено число, но изгледът очаква име на таблица в единствено число?

  2. в рамките на групови сортировки в mysql

  3. Използване на роли, нови в MySQL 8

  4. Как да ограничим включването в асоциация на ownsToMany в Sequelize JS?

  5. Изпълняване на mySQL заявка като cron работа?