前段时间我们遇到了批量插入\更新到MS SQL数据库的问题。
任务非常简单 - 从数据库检索数据,执行数据转换并更新父表并填写子表。数据量巨大,这就是为什么我们对以最高性能方式感兴趣的原因。数据库(存储过程,文件处理等)中的所有内容都不适用,因为我们需要从第三方应用程序获取一些信息。
虽然在互联网上你可以找到很多关于如何禁用autoCommit并执行批量插入\更新的文章,但无论如何它会逐个发送请求。 这适用于大多数免费的jdbc驱动程序,包括最常用的一个 - net.sourceforge.jtds.jdbc.Driver(http://sourceforge.net/p/jtds/discussion/129584/thread/8e89906c/)。 可能DataDirect支持这样的功能,但它不是免费的。飞 - List of JDBC drivers for SQL Server 2008 (comparison)。
请与解决类似问题的经验分享。
最诚挚的问候,
亚历
答案 0 :(得分:0)
我们以其他方式解决了这个问题。由于我们需要批量执行2个数据修改(插入新的子记录并使用某些字段更新现有的父级),我们重新编写查询以执行此操作:
更新
UPDATE ParentTable SET DeviceInformation = dual.DeviceInformation FROM ParentTable ptb
JOIN ( values (1, 'info1'), (2, 'info2')) as dual (ParentTableID, DeviceInformation)
ON ptb.ParentTableID = dual.ParentTableID
INSERT 的相同想法:
INSERT INTO dbo.ChildTable
(ChildId, ChildNumber, Info)
values (1, 1, 'some text'), (2, 2, 'some text2')
它给我们带来了显着的性能提升,因为大部分时间花在了连接建立上。
我希望它会有所帮助。