sql >> Database teknologi >  >> RDS >> Mysql

doktrin 2 - Hvordan forbedrer man skylleeffektiviteten?

Du gør det rigtigt -- det er bare langsomt, fordi den ekstra abstraktion af ORM betyder, at du ikke kan foretage den slags optimeringer, du gerne vil have.

Når det er sagt, bliver EntityManager langsom med så store transaktioner. Hvis du ikke absolut har brug for dem alle i én stor transaktion, kan du sandsynligvis få mere effektiv kode ved at flush()ing og derefter clear()ing af EM hver 20-200 iterationer af din loop.

Hvis det ikke giver dig nok ydeevne, er det eneste alternativ, jeg kan komme i tanke om, at vende tilbage til tilpasset kode, der kører tilpasset SQL direkte mod dit DBMS.

Jeg ved godt, at dette ikke er et godt svar, men jeg kan i det mindste fortælle dig, at du ikke er skør.

------ rediger ------

Fra den officielle Doctrine2-artikel om Batchbehandling :

Der er også en betydelig forskel i ydeevne, når du bruger fjernbetjening vs lokal database som overhead for at sende hver forespørgsel til fjernserver er ret stor. Overhead er meget lavere ved brug af lokal database takket være transaktioner og DB-optimeringer. (f.eks. 70 sek. sænket til 300 ms i tilfælde af eksemplet i spørgsmålet)



  1. Sådan får du distinkte poster fra en tabel i SQL Server - SQL Server / TSQL Tutorial 112

  2. WHERE IS NULL, IS NOT NULL eller NO WHERE-sætning afhængigt af SQL Server-parameterværdien

  3. Sådan fjerner du cifre fra slutningen af ​​strengen ved hjælp af SQL

  4. MySQL - Henter laveste værdi