Hallo,
ich wollte ein PreparedStatement nutzen, um mehr Geschwindigkeit
bei meinen INSERTs zu haben. Also:
Das Anmelden des PreparedStatement per conn.prepareStatement
dauert eine halbe Sekunde! Das kann doch nicht so lange dauern?!
Bei 400 INSERTs dauert connection.prepareStatement(...) 0,5s,
das Einfügen der Werte in einer Schleife selbst dann nochmal etwa 0,25s.
Das Gleiche mit ganz normalen einzelnen Statements dauert - aufgepasst -
0,75s, also genauso lang. Meine PreparedStatements wären also nur dann
schneller, wenn ich hier >400 Zeilen einfüge.
Ich habe gerade einen Statement-Batch getestet, also
Das dauert jetzt 0,8s; also länger als die einzelnen Statements
bzw. PreparedStatement. Ich bin verwirrt.
Sind 0,5s für das Parsen des PreparedStatement normal?
Warum ist ein Statement.executeBatch nicht schneller als
das Verschicken von einzelnen Statements?
Wo kann ich noch optimieren?
Danke und Gruß
Bernd
PS: Ich nutze MySQL 5.1, den MySQL-Connector v5.1.6, Java 6 Update 22,
all das in einer Web-Anwendung unter Tomcat6.
ich wollte ein PreparedStatement nutzen, um mehr Geschwindigkeit
bei meinen INSERTs zu haben. Also:
Java:
String sqlInsertWord = "INSERT INTO wordsp (germanWord, foreignWord, lessonId) VALUES (?,?,?)";
PreparedStatement prepStmt = conn.prepareStatement(sqlInsertWord); // dauert 0.5s !!!
dauert eine halbe Sekunde! Das kann doch nicht so lange dauern?!
Bei 400 INSERTs dauert connection.prepareStatement(...) 0,5s,
das Einfügen der Werte in einer Schleife selbst dann nochmal etwa 0,25s.
Das Gleiche mit ganz normalen einzelnen Statements dauert - aufgepasst -
0,75s, also genauso lang. Meine PreparedStatements wären also nur dann
schneller, wenn ich hier >400 Zeilen einfüge.
Ich habe gerade einen Statement-Batch getestet, also
Java:
String sqlInsert = "INSERT INTO wordsp (germanWord, foreignWord, lessonId) VALUES ('%s','%s',%s)";
while ((line = bis.readLine()) != null) { // 400 Zeilen im BufferedInputStream
String sql = String.format(sqlInsert, values[0], values[1], lessonId);
stmt.addBatch(sql);
}
stmt.executeBatch();.
Das dauert jetzt 0,8s; also länger als die einzelnen Statements
bzw. PreparedStatement. Ich bin verwirrt.
Sind 0,5s für das Parsen des PreparedStatement normal?
Warum ist ein Statement.executeBatch nicht schneller als
das Verschicken von einzelnen Statements?
Wo kann ich noch optimieren?
Danke und Gruß
Bernd
PS: Ich nutze MySQL 5.1, den MySQL-Connector v5.1.6, Java 6 Update 22,
all das in einer Web-Anwendung unter Tomcat6.