Hallo,
ich vergleiche gerade mehrere methoden viele zeilen in eine tabelle einzufügen.
Zuerst ist das das bisher im code (nicht meiner^^) verwendete Verfahren, ein laaaanges insert query mit vielen einträgen zu basteln.
Dann die methode über Prepared statements:
Vergleiche ich nun die Zeit, die beide methoden brauchen um 100 000 Zeilen in 1000er Paketen hinzuzufügen ist die prepared statement methode um üetwa 40% langsamer. Es will mir nicht ganz in den kopf das die saubere Art das zu machen so viel langsamer ist.
Was mache ich falsch.
Laures
ich vergleiche gerade mehrere methoden viele zeilen in eine tabelle einzufügen.
Zuerst ist das das bisher im code (nicht meiner^^) verwendete Verfahren, ein laaaanges insert query mit vielen einträgen zu basteln.
Java:
StringBuffer insertStart, insert = new StringBuffer();
String insertValues;
insertStart = new StringBuffer("INSERT INTO " + tn + "(id, ts, uid, eid) VALUES");
insert.append(insertStart);
stmt = c.createStatement();
stmt = c.createStatement();
for(uid = 1; uid <= COUNT; uid++) {
id = uid - COUNT;
insertValues = "(" + id + ", '" + new Timestamp(System.currentTimeMillis()) + "', " + uid + ", " + 42 + ")";
insert.append(insertValues);
if(uid % BATCH == 0 || uid == COUNT) {
stmt.execute(insert.toString());
insert = new StringBuffer(insertStart);
} else {
insert.append(", ");
}
}
Dann die methode über Prepared statements:
Java:
String sql = "INSERT INTO " + tn + "(id, ts, uid, eid) VALUES (?, ?, ?, ?)";
stmt = c.prepareStatement(sql);
for(uid = 1; uid <= COUNT; uid++) {
id = uid - COUNT;
stmt.setInt(1, id);
stmt.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
stmt.setInt(3, uid);
stmt.setInt(4, 35);
stmt.addBatch();
if(uid % BATCH == 0 || uid == COUNT) {
stmt.executeBatch();
stmt.clearBatch();
}
}
Vergleiche ich nun die Zeit, die beide methoden brauchen um 100 000 Zeilen in 1000er Paketen hinzuzufügen ist die prepared statement methode um üetwa 40% langsamer. Es will mir nicht ganz in den kopf das die saubere Art das zu machen so viel langsamer ist.
Was mache ich falsch.
Laures
Zuletzt bearbeitet: