我刚刚发现 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/