gpt4 book ai didi

java - SQLite Java 插入 - 许多较小的插入与更少、较大的插入

转载 作者:行者123 更新时间:2023-12-02 11:35:13 25 4
gpt4 key购买 nike

我有一个数据库线程,每 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.");
}
}
}
}

最佳答案

适度借用了Is it possible to insert multiple rows at a time in an SQLite database?的答案.

自从你的INSERT block 被包裹在 TRANSACTION 中差别不大。请参阅this comment from the SQLite Mailing List :

On Thu, Feb 23, 2012 at 8:25 AM, Petite Abeille wrote:

On Feb 23, 2012, at 2:16 PM, Abhinav Upadhyay wrote:

. I was wondering if I could insert them using a single INSERT query

啊,而且,使用复合 Blade 也没有多大好处。

您也可以简单地将所有值插入一笔交易中,然后 完成。

另一方面,即将发布的 3.7.11 版本似乎支持 多值插入语句。

http://www.sqlite.org/draft/releaselog/3_7_11.html

新的多值插入只是复合词的语法糖 插入。无论哪种方式都没有性能优势。

关于java - SQLite Java 插入 - 许多较小的插入与更少、较大的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com