鉴于我有一个简单的查询:
List<Customer> findByEntity(String entity);
该查询在700毫秒内返回7k条记录。
Page<Customer> findByEntity(String entity, Pageable pageable);
该查询在1080ms内返回10条记录。我知道用于分页的其他计数查询,但似乎还是有问题。我注意到的另一件奇怪的事情是,如果我将页面大小从10增加到1900,则响应时间在1080 ms左右是完全相同的。
有什么建议么?
最佳答案
实际上,计数查询可能确实很昂贵。如果您坚持要了解集合中匹配的元素总数,那么不幸的是,该附加查询将无法解决。但是,如果您能够牺牲返回的信息,则有两种方法可以避免更多的开销:
Slice
作为返回类型-Slice
不会提供一种方法来找出元素总数,但可以让您找出下一个切片是否可用。在这里,我们通过读取比请求多的一个元素,并使用其(不存在)作为下一切片可用性的指示符,从而避免了计数查询。 List
作为返回类型 —这将简单地将分页参数应用于查询并返回所选元素的窗口。但是,它不会为您提供有关后续数据是否可用的信息。