gpt4 book ai didi

java - Hibernate针对简单查询和海量数据的性能提升

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:57 25 4
gpt4 key购买 nike

有很多关于 Hibernate 性能改进的文章,但我仍然无法解决这个问题。

  1. 我们目前正在生成一份包含大量记录(约 5 万条记录)的报告 (CSV)。
  2. 首先,hibernate 获取数据,然后 Java 代码使用获取的数据创建 CSV 文件。
  3. 查询仅在 1 个表上完成,具有 4 到 5 个 where 条件和几个 order by 列。没有连接,没有子查询,什么都没有。例如,生成的查询如下所示:select col1, col2, col3,.. col20 from table_name where condition1 and condition2 and condition3
  4. 表格已根据所需列正确索引。
  5. 每次导出前都会生成数据。缓存不适用。
  6. 另一点需要注意的是,映射到数据库表的 Java 实体大约有 70 个字段,因为表具有相同数量的列。

目前,仅获取并返回 50k 条记录大约需要 3 到 4 分钟。这意味着以下代码大约需要 3-4 分钟。

final Criteria criteria = getSession().createCriteria(EntityName.class);
criteria.addOrder(Property.forName("property1").asc().ignoreCase());
criteria.addOrder(Property.forName("property2").asc().ignoreCase());
criteria.add(Restrictions.eq("condition1", condition1value));
criteria.add(Restrictions.in("condition2", condition2value));
criteria.add(Restrictions.in("condition2", condition3value));
criteria.add(Restrictions.in("condition4", condition4value));
return findByCriteria(criteria);

正如前面提到的,我在网上引用了多个引用资料,也尝试过使用 Spring JDBCTemplate

我可以在这里做些什么来缩短获取数据的时间吗?

最佳答案

获取时间可能不是由于您如何使用 hibernate,而更可能是由于数据库的设置方式。为数据库中使用的列创建索引,(获取数据的)性能将得到提高。

关于java - Hibernate针对简单查询和海量数据的性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com