是否有更好的方法来一次检索大块数据,而不是一次整体读取并分页?我正在尝试使用JdbcTemplate queryForList检索+ 300k行(200 MB)以上的大数据,并为我的API返回一个分页的响应。我找不到任何可行的列名来根据我的需要对数据进行排序,因此使用了ronum record_num。下面是我的代码。
final String sql = "SELECT * FROM (SELECT a.*, rownum record_num FROM (SELECT * FROM tableName WHERE MONTH = ? AND YEAR=?)a)";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, month, year);
答案 0 :(得分:0)
一种实现方法是使用rownum
伪列和换行查询。如果要读取10-20行(请注意rownum
从1开始):
SELECT *
FROM ( SELECT *, rownum r FROM tableName WHERE month = ? AND year = ? )
WHERE r > 10 AND r <= 20
但是,如果您使用的是Oracle 12c或更高版本,则可以使用新的database should optimize to skip reading redundant rows的OFFSET
语句:
SELECT *
FROM tableName
WHERE month = ? AND year = ?
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
答案 1 :(得分:0)
由于您的问题已用spring-boot
标记,我假设您正在以某种方式使用spring-boot。您为什么不考虑使用spring data JPA?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
这将使您可以使用Repository
基础结构。这样您就可以使用PagingAndSortingRepository
。这样您就可以分页访问结果。这是reference material。