什么原因导致Hibernate Session#update变慢?

时间:2016-11-04 19:58:41

标签: java hibernate

我有以下内容:

def foo
   33
end

foo = 44

>foo
#=> 44
>foo() #also you can call it by: self.foo || My omission, thanks @CarySwoveland

#=> 33

这种方法有两次调用,一次输入大小为~28000,一次输入大小为~32000,因此在大小方面差别不大。

然而,后者需要更长的时间才能运行。我的问题是什么会导致这个函数运行一次而不是另一次?鉴于所有其他属性在两者之间是相等的,我希望这些属性在相似的时间内完成。

我的理解是public void batchSave(Iterable<T> entities) { int i = 0; for (T entity : entities) { session.update(entity); i++; if (i % BATCH_SIZE == 0) { session.flush(); session.clear(); } } session.flush(); session.clear(); } 发布了对DB的更新,但我应该注意到,在32000组中,几乎所有对象都已经修改了状态,而对于28000只有大约5000个有。即便如此,28000大小的收集可能需要2秒,而略大的收集似乎可以运行几分钟。

2 个答案:

答案 0 :(得分:0)

这可能是因为auto (deferred) flushing。将它们分成两个不同的交易,速度可能更具可比性。

答案 1 :(得分:0)

由于后一个表没有正确编入索引,所以这是一个疏忽,因此更新在DB上花费的时间更长。