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

Skal indsætte 100000 rækker i mysql ved hjælp af dvale på under 5 sekunder

Efter at have prøvet alle mulige løsninger fandt jeg endelig en løsning til at indsætte 100.000 rækker under 5 sekunder!

Ting jeg prøvede:

1) Erstattet dvale/databasens AUTOINCREMENT/GENERATEDE id'er med selvgenererede ID'er ved hjælp af AtomicInteger

2) Aktivering af batch_inserts med batch_size=50

3) Tømmer cachen efter hvert 'batch_size' antal persist()-kald

4) multithreading (forsøgte ikke denne)

Endelig, hvad der virkede, var at bruge en native multi-insert-forespørgsel og indsættelse af 1000 rækker i en sql insert-forespørgsel i stedet for at bruge persist() på hver enhed. For at indsætte 100.000 enheder opretter jeg en indbygget forespørgsel som denne "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1000 rækkeindsættelser i én sql-indsættelsesforespørgsel]

Nu tager det omkring 3 sekunder at indsætte 100.000 poster! Så flaskehalsen var selve ormen! For masseindsættelser er det eneste, der ser ud til at virke native indsættelsesforespørgsler!



  1. MySQL den rigtige syntaks at bruge nær '' ved linje 1 fejl

  2. MySQL-fejl 1436:Overløb af trådstak med simpel forespørgsel

  3. Nulstil PostgreSQL primærnøgle til 1

  4. Django, efter opgradering:MySQL-serveren er forsvundet