Java Batching合并与表值参数的性能比较

Java Batching合并与表值参数的性能比较,java,sql-server,jdbc,Java,Sql Server,Jdbc,我想使用JDBC 7和SQL Server 2014为大约数十万个实体优化当前合并批处理 prepared语句语法如下所示: 开始 声明@field1 type1=?; 声明@field2 type2=?; 作为目标合并到dbo.target_表中 使用(选择uuu field1=@field1,uuuu field2=@field2)作为源 打开(TARGET.field1=源。\uu field1) 匹配后,更新集合field1=@field1,field2=@field2 如果未与目标匹配

我想使用JDBC 7和SQL Server 2014为大约数十万个实体优化当前合并批处理

prepared语句语法如下所示:

开始
声明@field1 type1=?;
声明@field2 type2=?;
作为目标合并到dbo.target_表中
使用(选择uuu field1=@field1,uuuu field2=@field2)作为源
打开(TARGET.field1=源。\uu field1)
匹配后,更新集合field1=@field1,field2=@field2
如果未与目标匹配,则插入(field1,field2)值(@field1,@field2);
结束
然后程序将POJO值绑定到上面声明的变量中

在阅读了SQL Server的文档之后,似乎批处理语句将在服务器端单独执行,而且每次合并都需要一个完整的表搜索,这可能会导致很长的等待时间

我想知道是否可以通过使用
DECLARE@my\u table\u var table(field1 type1,field2 type2)
优化流程,将数据插入到
@my\u table\u var
中,然后执行如下合并操作:

作为目标合并到dbo.target_表中
使用@my_table_var作为源
ON(TARGET.field1=@my_table_var.field1)
匹配后,更新SET TARGET.field1=@my_table_var.field1,TARGET.field2=@my_table_var.field2
如果未与目标匹配,则插入(field1,field2)值(@my_table_var.field1,@my_table_var.field2);

是的,基于集合的方法更好。我会将表变量改为临时表(基数估计)。是的。使用表值参数:“使用表值参数”对于非常大的负载,大容量加载临时表可能会获得更好的性能。但是TVP有点简单,并且会很好地执行。考虑另一个补充问题是,如果这个过程将在同一个会话中执行多次,那么上面的表类型的重新声明是否会引发任何异常?