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