使用Hibernate要从以下几个方面入手解决性能问题.
一、尽量降低数据库的访问次数。
解决方案:充分利用Hibernate的缓存,对延迟检索和立即检索设置批量检索数目。
二、避免多余加载程序不需要的数据
可以采用延迟策略和集合过滤。
三、避免查询无用的字段。
可以使用投影查询,只查出实例的一部分字段。
使用Iterate()方法。
在这里特别注意Iterate()方法和List()方法的区别。否则不仅起不到优化的效果,反而还加大系统的开销。Iterate()方法是基于Hibernate缓存基础之上的,包括一级和二级缓存。Iterate()的实现原理是:首先从数据库中检索ID,然后在SESSION的一级缓存或SessionFactory的二级缓存中查找对应ID的对象,如果有直接从缓存中提取该对象,否则再从数据库中查询。由此,你没有用到缓存,那么用Iterate将会频繁的查询数据通库。下面举个例子看一下应该更明白了。
前提在Session缓存范围内;
首先执行:Query query1 =session.createQuery("from User where id<=100");
List resultList1=query1.list();
Query query2=session.createQuery("from User where id<50");
List resultList2=query2.iterate();
这个事务内执行的SQL为:from User where id<=100; from User where id<50;
因为第一次查询出的结果为ID是100以内的User对象,并且这些对象会被缓存在session的一级缓存中。所以第二次能过iterate()仅仅是查询出Id,根据id在一级缓存中可以找到ID是50以内的所有对象,这样操作性能当然有所提高了。
再看另一种情况:
首先执行:Query query1 =session.createQuery("from User where id<50");
List resultList1=query1.list();
Query query2=session.createQuery("from User where id>50 and id <100");
List resultList2=query2.iterate();
大家知道执行这样的HQL,hinernate会执行多少条SQL语句吗?结果是1+1+49=51条SQL语句,有些人会问为什么会执行如此多的SQL呢?别急,继续看下去你会明白的。
执行刚才的("select * from User where id<50")这个HQL只会查询一次数据库,并且把ID<50的对象都缓存起来了。当执行("select * from User where id>50 and id <100")时,先查询了一次数据库:select id from User where id>50 and id<100,然后再根据查出的ID在一级缓存中查找有没有对应的User对象。这时肯定找不到了,因为缓存中只有ID<50的User对象,不可能找出ID>50&&ID<100的User对象了。那怎么办呢,总不能给用户仅仅回ID吧,这时降根据ID查询数据库了,所以这时候再执行49条SQL语句!感觉到了吗,什么时候用iterate?
分享到:
相关推荐
### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...
珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手
### Hibernate性能优化方案详解 #### 一、引言 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,其高效性和灵活性受到众多开发者的青睐。然而,不当的设计和配置往往会导致性能瓶颈,严重影响应用程序...
"Hibernate性能优化共9页.pdf.zip" 这个文件标题表明了内容专注于Hibernate框架的性能优化,暗示我们将探讨如何提升使用Hibernate进行数据库操作时的效率。通常,性能优化涉及减少延迟、提高吞吐量、降低资源消耗等...
Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。在本文中,我们将讨论两个常见的性能优化问题:批量处理和 1+n 问题,并提供相应的解决方法。 问题 1:...
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
以下是对《hibernate性能优化[参考].pdf》内容的详细解读: 1. **数据库优化**: - **物理硬件优化**:关注磁盘的IO性能,因为数据库读写频繁,磁盘的寻道能力直接影响数据访问速度。 - **MySQL配置优化**:通过...
### Hibernate 性能优化 #### 一、引言 Hibernate 是一款非常强大的对象关系映射(ORM)框架,它能够简化 Java 应用程序与数据库之间的交互过程。然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面...
二级缓存是Hibernate性能优化的重要手段,通过合理配置和使用,可以显著减少数据库访问,提高系统响应速度。但同时,需要注意缓存的副作用,如数据一致性、并发控制等问题。在实际应用中,需要结合业务场景和性能...
在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...
### Hibernate性能调优知识...综上所述,Hibernate性能优化涉及多个层面,包括但不限于关联管理、集合类型选择、继承关系配置以及缓存策略等。合理配置这些选项能够显著提高应用程序的性能,并且减少不必要的资源消耗。
【标签】:hibernate, 性能优化 【正文】: 1. **数据库设计调整**: - **降低关联的复杂性**:减少多对多关联,避免过度嵌套的对象关系。 - **避免联合主键**:联合主键可能导致额外的性能损失,尝试使用单独的...
的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...