有许多关于Hibernate性能改进的文章,但我仍然无法解决这个问题。
where
条件和几个order by
列。没有连接,没有子查询,没有。例如,生成的查询如下所示:select col1, col2, col3,.. col20 from table_name where condition1 and condition2 and condition3
。目前,只需要3到4分钟即可获取并返回50k记录。 这意味着,以下代码大约需要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
。
我可以在这做任何事情来缩短获取数据的时间吗?
答案 0 :(得分:0)
获取的时间可能不是由于你如何使用hibernate,而是更可能是如何设置数据库。为您在数据库中使用的列创建索引,并且将改进性能(提取数据)。
答案 1 :(得分:0)
如果您具有应用程序设置,以便可以缓存特定的模型实例(即实体),则可以通过这种方式提高性能。例如,您需要使用" Dog" s列表执行某些操作。如果您知道需要简单地使用最初获取的列表一次,则可以缓存结果集并继续使用它。当然,这涉及一些其他配置,以便您可以在必要时重新获取列表。我使用专有的ORM(不是Hibernate)和模型框架(不是SPring),但它更多地与框架而不是ORM层有关。如果Spring有办法进行此类缓存,您可以使用它。