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

doktryna2 - Jak poprawić efektywność spłukiwania?

Robisz to dobrze — jest to po prostu powolne, ponieważ dodana abstrakcja ORM oznacza, że ​​nie możesz dokonywać takich optymalizacji, jakie chcesz.

To powiedziawszy, EntityManager działa wolno przy tak dużych transakcjach. Jeśli nie potrzebujesz ich wszystkich w jednej dużej transakcji, prawdopodobnie możesz uzyskać bardziej wydajny kod, wykonując flush(), a następnie clear() EM co 20-200 iteracji pętli.

Jeśli to nie zapewni Ci wystarczającej wydajności, jedyną alternatywą, jaką mogę wymyślić, jest powrót do niestandardowego kodu, który uruchamia niestandardowy SQL bezpośrednio na Twoim DBMS.

Wiem, że to nie jest dobra odpowiedź, ale przynajmniej mogę ci powiedzieć, że nie jesteś szalony.

------ edytuj ------

Z oficjalnego artykułu Doctrine2 na temat Przetwarzanie wsadowe :

Istnieje również znacząca różnica w wydajności podczas korzystania z zdalnego i lokalnego bazy danych jako obciążenie związane z wysyłaniem każdego zapytania do zdalnego serwera jest dość duże. Obciążenie jest znacznie niższe podczas korzystania z lokalnej bazy danych dzięki transakcjom i optymalizacji bazy danych. (np. 70s skrócone do 300ms w przypadku przykładu z pytania)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:bigint kontra int

  2. Ograniczenia klucza obcego MySQL, kaskadowe usuwanie

  3. Zrzut MySQL do plików tekstowych CSV z nazwami kolumn na górze?

  4. Co dokładnie robi grupowanie według?

  5. Jak przechowywać znaki inne niż angielskie?