首页 > 解决方案 > JdbcTemplate - queryForList - 大量数据运行缓慢

问题描述

我正在使用 Spring Boot + CommonsDBCP + JdbcTemplate。我需要从具有大量数据的 Hive 表中获取记录。

SQL: select * from customer

总记录:52K。

我正在使用List<Map<String,Object>> result = jdbcTemplate.queryForList(SQL)来获取记录。对于上述数量的记录,这运行缓慢。

这使用RowMapperResultSetExtractor提取数据需要96 秒。如果数据量增加,查询时间会增加。

有什么建议可以改进这个时间或使用 jdbctemplate 中的任何其他方法吗?

标签: jdbctemplate

解决方案


您曾经可以使用 try-with-resources 执行普通的 JDBC,使用SELECT a, b, c, ...或使用 ResultSetMetaData 给出 column-label-to-column-no。地图列表很昂贵,所以对象列表会更好。有许多 RowSet 类。

最后但并非最不重要的一点是,简单地收集列表,而是遍历所有列表是理想的。

本地内存减慢速度时的一项功能是使用Statement#setMaxRowssetLargeMaxRows使用部件。

还有另一种选择:表转储。

无事务查询也可能有所帮助。

这些都是有争议的措施;一个必须尝试。一个令人信服的改进,我可以在我从未发现的任何地方重复使用。先从其他答案开始。


推荐阅读