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

È necessario inserire 100000 righe in MySQL utilizzando l'ibernazione in meno di 5 secondi

Dopo aver provato tutte le soluzioni possibili ho finalmente trovato una soluzione per inserire 100.000 righe in meno di 5 secondi!

Cose che ho provato:

1) Sostituiti gli ID AUTOINCREMENT/GENERATED di ibernazione/database con ID autogenerati utilizzando AtomicInteger

2) Abilitazione batch_inserts con batch_size=50

3) Svuotare la cache dopo ogni numero 'batch_size' di chiamate persist()

4) multithreading (questo non l'ho provato)

Infine, ciò che ha funzionato è stato l'utilizzo di una query nativa a più inserimenti e inserendo 1000 righe in una query di inserimento sql invece di utilizzare persist() su ogni entità. Per inserire 100.000 entità, creo una query nativa come questa "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1000 inserimenti di riga in una query di inserimento sql]

Ora ci vogliono circa 3 secondi per inserire 100.000 record! Quindi il collo di bottiglia era l'orm stesso! Per gli inserimenti in blocco, l'unica cosa che sembra funzionare sono le query di inserimento native!