2016-04-20 9 views
0

Ich habe eine Client Java 7 App, die große Anzahl von kleinen Daten (einige Spalten) in die Datenbank einfügen muss. Datenbank (Mysql 5.6) befindet sich auf meinem Server. Clientseitige Java-App ruft die gespeicherte Prozedur in einer Schleife zum Einfügen einer einzelnen Zeile auf. Zeile ist einfach, sieht so aus:Mysql Einfügen mehrerer Zeilen mit einer einzigen Einfügung

int | int | varchar | varchar | int | Datetime

und die aktuelle Art, wie ich das zu tun habe, ist, wie dieser (Pseudocode):

try(DbConnection conn = new DbConnection()) { 
for(RowModel model : rowModel) { 
//inserting row here 
} 
} 
catch(SqlException e) { 
//process exception... 
} 

Wie Sie sehen, ich bin Verbindung einmal öffnen und i Zeile für Zeile einzufügen. "rowModel" kann Tausende von Zeilen haben und für mich sieht es so aus, als ob es sinnvoller wäre, 1 "LongText" an mysql stored procedure zu senden, die diesen Longtext irgendwie für einen einzelnen "insert" -Anruf geeignet macht.

Ist es möglich und wie? Was schlägst du vor?

Also, im Grunde, um Dinge zu summieren: 1) gibt es einen Vorteil beim Aufruf einer "einfügen" mit vielen Werten anstelle von "for-each" auf der Client-Seite? 2) Wie könnte ich meine gespeicherte Prozedur schreiben, so dass es 1 großen Text braucht und fügt es mit einzelnen "INSERT" -Befehl ein?

+0

Sie können 'Einfügen in t (col1, col2) Werte (1,2), (3,4), (5,6)' oder schauen Sie in BULK Einfügung Tipps: http s: //dev.mysql.com/doc/refman/5.5/de/optimizing-innodb-bulk-data-loading.html –

+0

Es gibt relevante Performance-Vorteile aufrufen auf Einfügen mit vielen Werten .. Sie führen nur einen Befehl anstelle von vielen Befehlen wie Ihre Zeilen .. – scaisEdge

+0

@scaisEdge, die eine Antwort sein könnte, wenn Sie es unten setzen. Punkte Ruhm und Reichtum folgen. – Drew

Antwort

1

Es gibt relevante Performance-Vorteil auf dem Einsatz mit viel Werte aufrufen .. Sie nur einen Befehl einmal ausführen onle statt vieler Befehle wie, wie viele Zeilen, die Sie einsetzen müssen ..

Typischerweise wird die Batch-Einsatz, so wird auch diese Technik genannt, reduzieren Sie die Dauer des Verfahrens von vielen Zeit.

zB: in einigen empirischen Test Einfügen von 1000 in Insert-Schleife war die Ausführungszeit von 1 Minuten .. mit Batch-Einsatz die Zeit Ergebnis ist 2 secs

+0

Thx für die gemeinsame Nutzung von ScaisEdge – Drew

Verwandte Themen