我有一个MySQL数据库,我需要进行1k左右的更新,我正在考虑使用executeBatch
或executeUpdate
是否更合适。 preparedstatement将建立在1k或更多id的ArrayList上(这是要更新的表的PK)。对于表的每次更新,我需要检查它是否已更新(可能是id不在表中)。在id不存在的情况下,我需要将该id添加到单独的ArrayList中,该ArrayList将用于批量插入。
鉴于上述情况,这样做更合适:
各种单独的executeUpdate()
然后存储ID(如果未更新)或
只需创建一个批处理并使用executeBatch()
,它将为每个单独的语句/ id返回0或1的数组。
在第二种情况下,开销将是一个额外的数组,用于保存所有0或1的返回值。在第一种情况下,开销将由于分别执行每个UPDATE。
答案 0 :(得分:0)
我会批处理,因为除非你以某种方式在同一个盒子上运行它,否则需要考虑网络延迟。
答案 1 :(得分:0)
绝对是executeBatch(),并确保在jdbc连接字符串中添加“rewriteBatchedStatements = true”。
吞吐量的增加很难夸大。假设您有适当的索引和使用它们的WHERE子句,您的1K更新可能只需要比单个更新更长的时间。
如果没有连接字符串的额外设置,批量更新的时间与单独进行每次更新的时间大致相同。