通过减少查询中的列数来提高JPA性能

时间:2012-02-17 12:42:15

标签: sql performance hibernate jpa

我有一个有很多列的大表。在不同的用例中,我需要从该表中加载不同的列,但通常我不需要所有列。所以现在我想我应该从这个大表中选择必要的列。

例如,我有一个像UseCase1这样的简单POJO,我使用这个命名查询:

SELECT NEW UseCase1(t.a, t.b, t.c) FROM MyBigTable t

在更新语句中,我还只更新a,b,c字段。

所以问题是,如果我不能改变表格,这是一个很好的解决方案,以提高性能?这会改善性能吗? :)

2 个答案:

答案 0 :(得分:1)

我们遇到了类似的情况,你可以在2个案例中看到使用这种技术的性能提升。

  1. 如果您的表格列数超过40-50,并且您只想选择5-10个值。
  2. 如果您的Bean定义了非Lazy集合映射。然后在构造函数中避免使用此属性将会节省大量资金。(这对我们非常有用)
  3. 就像@JB所说的那样,当我们谈论表演时,没有测量它就无法最终确定。这两点是我的一般经验。

答案 1 :(得分:0)

您还可以使用@Basic(fetch = LAZY)延迟加载单个非关系字段(例如字符串),例如:

@Basic(fetch = LAZY)
private String description;

不会加载此字段的表格列。请注意,当您访问该字段时,它将延迟加载单个查询,该查询可能会成为不同的性能问题(N + 1选择)。