【发布时间】:2018-02-26 16:59:24
【问题描述】:
我有一个数据库线程,每 500 毫秒将所有插入查询排序到一个事务中。目前,该应用程序对每条数据进行一次插入。将这些许多插入语句排序为相似的插入并使用更多元素执行更少的插入会更有效还是效率更低?我正在尝试减少插入所需的 CPU 功率。
IE(但实际上它的规模更大,元素更多)
Start Transaction
INSERT (A,B,C) INTO TABLE VALUES(1,2,3)
INSERT (A,B,C) INTO TABLE VALUES(4,5,6)
INSERT (A,B,C) INTO TABLE VALUES(7,8,9)
INSERT (A,B,C) INTO TABLE VALUES(10,11,12)
INSERT (A,B,C) INTO TABLE VALUES(13,14,15)
INSERT (A,B,C) INTO TABLE2 VALUES(1,2,3)
INSERT (A,B,C) INTO TABLE2 VALUES(4,5,6)
INSERT (A,B,C) INTO TABLE2 VALUES(7,8,9)
INSERT (A,B,C) INTO TABLE2 VALUES(10,11,12)
INSERT (A,B,C) INTO TABLE2 VALUES(13,14,15)
End Transaction
Versus
Start Transaction
INSERT(A,B,C) INTO TABLE VALUES((1,2,3),(4,5,6),(7,8,9),(10,11,12),(13,14,15))
INSERT(A,B,C) INTO TABLE2 VALUES((1,2,3),(4,5,6),(7,8,9),(10,11,12),(13,14,15))
End Transaction
要求的代码:
public void dbCallInsert(List<String> query) {
// Good practice to create a new statement and result set instead of reusing
Statement stmt = null;
Connection conn = null;
try {
// Fetch the query and the request out of the QueryRequest object
conn = cpds.getConnection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
String temp;
for (String a: query) {
stmt.execute(a);
}
conn.commit();
stmt.close();
conn.close();
} catch (Exception e) {
errorLog.error("Failed to issue database command " + query + ": " + e);
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
errorLog.error("Failed to close JDBC statement.");
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
errorLog.error("Failed to close JDBC connection.");
}
}
}
}
【问题讨论】:
-
我们可以看到您用于插入的 java 代码吗?您使用的是
Statement(或PreparedStatement)吗? -
按要求添加了代码。使用语句。