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

Musisz wstawić 100000 wierszy w mysql za pomocą hibernacji w mniej niż 5 sekund

Po wypróbowaniu wszystkich możliwych rozwiązań w końcu znalazłem rozwiązanie umożliwiające wstawienie 100 000 wierszy w ciągu 5 sekund!

Rzeczy, których próbowałem:

1) Zastąpiono identyfikatory AUTOINCREMENT/GENERATED hibernacji/bazy danych przez samodzielnie wygenerowane identyfikatory przy użyciu AtomicInteger

2) Włączenie insert_inserts z batch_size=50

3) Opróżnianie pamięci podręcznej po każdej liczbie wywołań „batch_size” persist()

4) wielowątkowość (nie próbowałem tego)

Wreszcie zadziałało natywne zapytanie z wieloma wstawkami i wstawianie 1000 wierszy w jednym zapytaniu sql insert zamiast używania persist() na każdym podmiocie. Aby wstawić 100 000 jednostek, tworzę natywne zapytanie, takie jak to "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1000 wierszy wstawianych w jednym zapytaniu sql]

Teraz wstawienie 100 000 rekordów zajmuje około 3 sekund! Więc wąskim gardłem był sam orm! W przypadku wstawiania zbiorczego jedyne, co wydaje się działać, to natywne zapytania wstawiania!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukiwanie pełnotekstowe PDO i MySQL

  2. Jak pominąć wiersz podczas importowania złego zrzutu MySQL

  3. Problem PHP OOP z bazą danych

  4. Błąd krytyczny:wywołanie funkcji członkowskiej bind_param() na wartości logicznej

  5. MySQL — funkcja FOUND_ROWS() dla całkowitej liczby wierszy, których dotyczy problem