春天Pageable getTotalElements()有多重?

时间:2018-01-30 12:24:15

标签: java pagination spring-data-jpa

如果我查询

  @Query("SELECT t FROM Product t WHERE t.isApproved = true AND t.partnerId = ?1 AND t.categories.status = ?2")
  Page<Product> findAllProducts(String senderId, String status, Pageable pageable);

并致电方法

Page<Product> products = findAllProducts...
products.getTotalElements()

会被称为SELECT COUNT(*)吗?

如果1000个用户同时调用此方法并且我的查询是300 000行 - 它是否会导致崩溃?

1 个答案:

答案 0 :(得分:1)

调用返回Pageable对象的Page参数的查询方法会产生两个查询:

  • 主要查询以及检索数据的其他limitoffset子句
  • 和'count'查询。

findAllProducts调用(而不是getTotalElements)导致崩溃的能力取决于您的查询/数据库optimization

如果您不希望自己的方法调用计数查询,则可以使用Slice代替Page作为返回参数:

Slice<Product> findAllProducts(String senderId, String status, Pageable pageable);

在这种情况下,不会调用额外的计数查询。

查看reference中的更多信息。