鉴于我有一个简单的查询:

List<Customer> findByEntity(String entity);

该查询在700毫秒内返回7k条记录。
Page<Customer> findByEntity(String entity, Pageable pageable);

该查询在1080ms内返回10条记录。我知道用于分页的其他计数查询,但似乎还是有问题。我注意到的另一件奇怪的事情是,如果我将页面大小从10增加到1900,则响应时间在1080 ms左右是完全相同的。

有什么建议么?

最佳答案

实际上,计数查询可能确实很昂贵。如果您坚持要了解集合中匹配的元素总数,那么不幸的是,该附加查询将无法解决。但是,如果您能够牺牲返回的信息,则有两种方法可以避免更多的开销:

  • 使用Slice作为返回类型-Slice不会提供一种方法来找出元素总数,但可以让您找出下一个切片是否可用。在这里,我们通过读取比请求多的一个元素,并使用其(不存在)作为下一切片可用性的指示符,从而避免了计数查询。
  • 使用List作为返回类型 —这将简单地将分页参数应用于查询并返回所选元素的窗口。但是,它不会为您提供有关后续数据是否可用的信息。
  • 10-07 12:01
    查看更多