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

Трябва да вмъкнете 100 000 реда в mysql с помощта на хибернация за по-малко от 5 секунди

След като опитах всички възможни решения, най-накрая намерих решение за вмъкване на 100 000 реда под 5 секунди!

Неща, които опитах:

1) Заменени АВТОМАТИЧНИ/ГЕНЕРИРАНИ идентификатори на хибернация/база данни със самостоятелно генерирани идентификатори с помощта на AtomicInteger

2) Активиране на batch_inserts с batch_size=50

3) Промиване на кеша след всеки брой извиквания на persist() 'batch_size'

4) многонишковост (не опитах това)

И накрая това, което проработи, беше използването на родна заявка с множество вмъквания и вмъкване на 1000 реда в една sql заявка за вмъкване вместо да се използва persist() на всеки субект. За вмъкване на 100 000 обекта създавам собствена заявка като тази "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1000 вмъквания на ред в една заявка за вмъкване на sql]

Сега са необходими около 3 секунди за вмъкване на 100 000 записа! Така че пречката беше самата форма! За групови вмъквания единственото нещо, което изглежда работи, са местните заявки за вмъкване!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неизвестна колона в списъка с полета

  2. Безкрайно превъртане с MySQL данни

  3. Linux shell скрипт за архивиране на база данни

  4. Проектиране на база данни с рецепти, която трябва да включва съставки, както и подрецепти

  5. Пагинация в PDO PHP