Spring数据Oracle JPA性能与分页

时间:2017-06-29 20:01:37

标签: spring oracle spring-data-jpa large-data

我希望在Oracle的支持下检索一个JpaRepository的大型数据集 表。选择是返回实体的集合(List)或Page,然后逐步执行结果。请注意 - 我必须使用此集合中的每条记录,只需一次。这不是“从大型数据集中寻找第一个 - 并且返回”操作

虽然分页的想法很有吸引力,但性能会很糟糕(n ^ 2),因为对于每个查询的页面,oracle必须提取前n-1页,因为随着我对结果的深入了解,性能会逐渐变差组。

我对List替代方案的理解是整个结果集将被加载到内存中。对于oracle JPA spring没有支持结果集。

所以这是我的问题

  1. 我对List使用Spring Data的方式的理解是否正确?如果不是,那么我将只使用List
  2. 如果我是正确的,是否有 Oracle / JPA结果集的替代方案?
  3. 是否有第三种方式我不知道。

1 个答案:

答案 0 :(得分:1)

SDJ中的可分页方法每次请求都会调用额外的select count(*) from ...。我认为这是问题的原因。 为避免这种情况,您可以使用Slice代替Page作为返回参数,例如:

Slice<User> getAllBy(Pageable pageable);

或者您甚至可以使用List个实体进行分页:

List<User> getAllBy(Pageable pageable);

其他info