Java spring Pageable getTotalElements()有多重?

Java spring Pageable getTotalElements()有多重?,java,pagination,spring-data-jpa,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); @Query(“从产品t中选择t,其中t.isApproved=true,t.

如果我提出疑问

  @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);
@Query(“从产品t中选择t,其中t.isApproved=true,t.partnerId=1,t.categories.status=2”)
页面findAllProducts(字符串senderId、字符串状态、可分页可分页);
和调用方法

Page<Product> products = findAllProducts...
products.getTotalElements()
Page products=findAllProducts。。。
products.getTotalElements()
它将被称为
选择计数(*)


如果1000个用户同时调用此函数,而我的查询是300000行-这不会导致崩溃吗?

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

  • 主查询,带有附加的
    limit
    offset
    子句,用于检索数据
  • 以及“计数”查询
findAllProducts
调用(而不是
getTotalElements
)导致崩溃的能力取决于您的查询/数据库

如果不希望方法调用计数查询,可以使用
Slice
而不是
Page
作为返回参数:

Slice<Product> findAllProducts(String senderId, String status, Pageable pageable);
切片findAllProducts(字符串senderId、字符串状态、可分页);
在这种情况下,将不会调用其他计数查询


有关详细信息,请参阅。

您可以启用SQL日志记录来了解。或者您可以阅读文档:。如果这导致崩溃,那么即使没有count查询,崩溃也会发生。确保查询已优化(数据库索引等)