java - JDBC 中的批量插入 - 单个事务会慢多少?

标签 java postgresql jdbc

我刚刚发现 JDBC 的 addBatch 操作,如果给出“INSERT INTO mytable (id, name) VALUES (?, ?)”将创建如下内容:

BEGIN TRANSACTION
INSERT INTO mytable (id, name) VALUES (1, "a"); 
INSERT INTO mytable (id, name) VALUES (2, "b");
...
END TRANSACTION 

与这样的语句相比:“INSERT INTO mytable (id, name) VALUES (1, "a"), (2, "b"), .. " 慢了多少是否会发生大规模交易? I/O 的差异会很重要吗?

最佳答案

PgJDBC 批处理通常不如多值 INSERT 快,但它更方便。

到目前为止,最有效的选项是通过PgJDBC's support for COPY使用COPY命令.

第二个选项是打开一个事务,进行批量多值插入(例如每次插入 10 行),然后进行一组单行插入以弥补差异,然后提交。

PgJDBC 批处理不应比打开事务、准备语句、循环使用准备好的语句发送每一行的数据、然后执行显式提交快得多。我不认为它目前在一个批处理中同时有多个正在运行的语句,但我不确定这一点,如果确实如此,当网络延迟很小时,这将使批处理速度显着加快因素。

我建议对其进行测试并实际了解其影响。

关于java - JDBC 中的批量插入 - 单个事务会慢多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115349/

相关文章:

java - 将 while 循环嵌套在 do while 循环内

java - 警报对话框自行取消

sql - 将星期几存储在单个列中的最佳方式

java - 无法连接到 heroku PostgreSQL 数据库

java - 如何管理与动态创建的数据库的连接

java - Bat文件自动更新空气 native 应用程序而不显示cmd

java - 使用java从字符串中删除html标签

postgresql - Sequelize – 按值存在排序

sql - PostgreSQL 如何将 null 视为值

mysql - 如何从 google apps 脚本 .gs 返回 jdbc ResultSet 到 html 文件