select查询能否在spring批处理中检索到200k条记录

iqxoj9l9  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(427)

问题:
在表中可能有200k条记录的数据库中,我们将触发下面的查询。

SELECT a.* from TABLE a inner join ( SELECT f.COLUMN1, f.COLUMN2, f.COLUMN3, MAX(f.DATECOLUMN4) as LATEST_DATE FROM TABLE f WHERE f.DATECOLUMN5 >= '2020-01-01 00:00:00' AND f.DATECOLUMN5 < '2020-06-04 23:00:00' AND f.COLUMN6 = true  GROUP BY f.COLUMN1, f.COLUMN2 , f.COLUMN3) b ON a.COLUMN1 = b.COLUMN1 and a.COLUMN2 = b.COLUMN2 and a.COLUMN3 = b.COLUMN3 and a.DATECOLUMN4 = b.LATEST_DATE WHERE a.DATECOLUMN5 >= '0001-01-01 00:00:00' and  a.DATECOLUMN5 < '2020-06-04 23:00:00' and a.COLUMN6 = true

下面是我们用来触发查询的repository类

@Repository
public interface Repository1 extends JpaRepository<Entity1, Long> {

//@formatter:off
  @Query(value = "select a.* from TABLE a " + 
      " inner join ( " + 
      "  select f.COLUMN1, f.COLUMN2, f.COLUMN3, max(f.DATECOLUMN4) as LATEST_DATE " + 
      "      from TABLE f " + 
      "      where f.DATECOLUMN5 >= ?1 and  f.DATECOLUMN5 < ?2 and f.COLUMN6 = true " +
      "      group by f.COLUMN1, f.COLUMN2, f.COLUMN3 " + 
      " ) a " + 
      " on a.COLUMN1 = a.COLUMN1 and a.COLUMN2 = a.COLUMN2 and a.COLUMN3 = a.FDP_REQUEST_TYPE_NAME and a.DATECOLUMN4 = a.LATEST_DATE "
      + " where a.DATECOLUMN5 >= ?1 and  a.DATECOLUMN5 < ?2 and a.COLUMN6 = true ",
      nativeQuery = true)
//@formatter:on
  List<Entity1> findRecordsBetweenDATECOLUMN5(LocalDateTime startTime, LocalDateTime endTime);

}

我无法测试代码,因为我无法访问包含20万条记录的表。因此,请考虑要检索的预期记录数是200k。查询是否能够检索到列表中的那么多记录?
请给我建议。

bvuwiixz

bvuwiixz1#

查询是否能够检索到列表中的那么多记录?
如果你给你的应用程序足够的内存,那么是的,我不明白为什么它不能。
但是,我建议使用分页项读取器,以便以块的形式加载记录。面向块处理的整个思想是以块的形式读取数据,而不是一次(一次)加载整个数据集 List 或内存中的任何其他数据结构)。

相关问题